افزایش سرعت برنامههای php
گروه آموزشی مجموعه تدبیر
phpچگونه کار میکند: هرگاه مفسر php برنامهای را تفسیر میکند هر دستور را به opcodes تبدیل میکند و این کد را اجرا میکند. عملیاتی که در هنگام اجرای یک کد php انجام میشود به صورت خلاصه به این شکل است:
آپاچی (و یا سایر برنامهها) کد php را برای اجرا به مفسر میدهند مفسر پس از خواندن کد، کد را تفسیر میکند و خروجی تولید میکند که tokens نامیده میشود سپس tokens را کامپایل میکند و خروجی opcodes را که خروجی نهایی است تولید میکند. و در نهایت این خروجی را اجرا میکند.
نکته: opcodes با زبان ماشین و یا Machine code متفاوت است. زبان ماشین وابسته به سختافزار است و مستقیما روی سختافزار اجرا میشود اما opcode غیر وابسته با سختافزار است و بوسیله مفسر php اجرا میشود.
مشکل کجاست: با هر بار نمایش یک صفحه وب پروسه تفسیر کد php به کد opcode بوسیله مفسر php انجام میشود در نتیجه این عملیات تکراری علاوه بر مصرف منابع سختافزاری سرعت اجرای صفحات را کم میکند.
راهحل: برای افزایش سرعت اجرای کدهای php میتوانیم یکبار کد php را تفسیر کنیم و خروجی opcode حاصله را کش کنیم و با هر بار درخواست مجدد صفحه opcode کش شده را اجرا کنیم.
با استفاده از برنامههای زیر میتوان opcode را کش کرد و در نتیجه سرعت اجرای کد php را افزایش داد.
- برنامه APC که خلاصه شده (Alternative PHP Cache) است.
- برنامه MMCache که با نام Turck MMCache نیز شناخته میشود.
- برنامه XCache .
- برنامه eAccelerator.
- و بلاخره برنامه تجاری zend.
XCache در حالت mod_php و FastCGI بدون مشکل کار میکند اما CGI و CLI را پشتیبانی نمیکند. در صورت تنظیم مناسب سرعت اجرای کدهای پیاچپی را تا پنج برابر افزایش میهد.
راهنمای نصب xcache در سنتاواس و php5:
آخرین نسخه xcache را از سایت گیتهاب دانلود میکنیم.
|
wget https://github.com/lighttpd/xcache/archive/master.zip
|
فایل را از حالت فشرده خارج میکنیم.
ابزارهای لازم برای کامپایل و نصب برنامه را نصب میکنیم.
|
yum–yinstall php–devel
yum install–ygcc make
phpize
|
در نهایت بسته را کانفیگ، کامپایل و نصب میکنیم.
|
./configure—enable–xcache
make
make install
|
فایل تنظیمات را از مسیر جاری به /etc/php.d کپی میکنیم.
|
cp xcache.ini/etc/php.d/
vi/etc/php.d/xcache.ini
|
فایل تنظیمات را باز کنید و تغییرات زیر را در فایل انجام دهید.
نام کاربری را از admin به نام کاربری مورد نظر خود تغییر دهید.
در خطر فرمان دستور زیر را اجرا کنید و خروجی را در خطxcache.admin.pass قرار دهید. (pass را با پسورد خود جایگزین کنید).
دستور زیر را در خط فرمان سرور اجرا کنید و خروجی را در قسمت xcache.count بنویسید.
|
cat/proc/cpuinfo|grep–cprocessor
|
فایل تنظیمات نمونه:
|
xcache.admin.auth=On
xcache.admin.user=“admin”
xcache.admin.pass=“”
xcache.shm_scheme=“mmap”
xcache.size=32M
xcache.count=1
xcache.ttl=3600
xcache.gc_interval=300
|
سرویس آپاچی را ریاستارت میکنیم.
چنانه نصب xcache به درستی انجام شده باشد با اجرای دستور php -v باید پیام زیر نمایش داده شود.
|
php–v
with XCache v1.2.1,Copyright(c)2005–2007
|
تست:
اما آیا پس از نصب xcache سرعت اجرای اسکریپتهای پیاچپی واقعا افزایش یافته است؟ برای پاسخ به این سئوال سرعت اجرای صفحات را با استفاده از برنامه ab بررسی میکنیم.
نکته: برنامه ab که به نام Apache benchmark نیز شناخته میشود. ابزاری برای بررسی و تست وبسرور آپاچی است.
روی سرور وردپرس را با تنظیمات پیش فرض نصب میکنیم. مسیر نصب وردپرس به شکل زیر خواهد بود.
|
http://192.168.0.1/wordpress/
|
تست سرور در حالت فعال بودن xcache:
از سرور دیگری برنامه ab را به شکل زیر اجرا میکنیم.
|
ab–n10000http://192.168.0.1/wordpress/
|
خروجی برنامه به شکل زیر است.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
[root@server local]# ab -n 10000 http://192.168.0.1/wordpress/
ThisisApacheBench,Version2.3<$Revision:655654$>
Copyright1996Adam Twiss,Zeus Technology Ltd,http://www.zeustech.net/
Licensed toThe Apache Software Foundation,http://www.apache.org/
Benchmarking192.168.0.1(be patient)
Completed1000requests
Completed2000requests
Completed3000requests
Completed4000requests
Completed5000requests
Completed6000requests
Completed7000requests
Completed8000requests
Completed9000requests
Completed10000requests
Finished10000requests
Server Software: Apache/2.2.15
Server Hostname: 192.168.0.1
Server Port: 80
Document Path: /wordpress/
Document Length: 7876bytes
Concurrency Level: 1
Time taken fortests: 753.403seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 81260000bytes
HTML transferred: 78760000bytes
Requests per second: 13.27[#/sec] (mean)
Time per request: 75.340[ms](mean)
Time per request: 75.340[ms](mean,across all concurrent requests)
Transfer rate: 105.33[Kbytes/sec]received
Connection Times(ms)
min mean[+/–sd]median max
Connect: 0 1 1.4 1 28
Processing: 72 74 3.4 74 262
Waiting: 61 73 3.0 73 261
Total: 72 75 3.7 74 262
Percentage of the requests served withinacertain time(ms)
50% 74
66% 75
75% 76
80% 76
90% 79
95% 81
98% 85
99% 87
100% 262(longest request)
|
تست سرور در حالت غیر فعال بودن xcache:
فایل تنظیم xcache را با دستور زیر به دایرکتوری /root منتقل میکنیم. (با حذف فایل تنظیمات xcache غیر فعال میشود.)
|
mv/etc/php.d/xcache.ini/root/
|
آپاچی را ریاستارت میکنیم.
سپس مجدا دستور زیر را در یک سرور اجرا میکنیم.
|
ab–n10000http://192.168.0.1/wordpress/
|
خروجی به این صورت است.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
[root@server local]# ab -n 10000 http://192.168.0.1/wordpress/
ThisisApacheBench,Version2.3<$Revision:655654$>
Copyright1996Adam Twiss,Zeus Technology Ltd,http://www.zeustech.net/
Licensed toThe Apache Software Foundation,http://www.apache.org/
Benchmarking192.168.0.1(be patient)
Completed1000requests
Completed2000requests
Completed3000requests
Completed4000requests
Completed5000requests
Completed6000requests
Completed7000requests
Completed8000requests
Completed9000requests
Completed10000requests
Finished10000requests
Server Software: Apache/2.2.15
Server Hostname: 192.168.0.1
Server Port: 80
Document Path: /wordpress/
Document Length: 7876bytes
Concurrency Level: 1
Time taken fortests: 1465.429seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 81260000bytes
HTML transferred: 78760000bytes
Requests per second: 6.82[#/sec] (mean)
Time per request: 146.543[ms](mean)
Time per request: 146.543[ms](mean,across all concurrent requests)
Transfer rate: 54.15[Kbytes/sec]received
Connection Times(ms)
min mean[+/–sd]median max
Connect: 0 1 1.3 0 22
Processing: 139 146 6.0 145 542
Waiting: 115 145 5.5 144 541
Total: 140 146 6.2 146 543
Percentage of the requests served withinacertain time(ms)
50% 146
66% 147
75% 148
80% 149
90% 151
95% 154
98% 158
99% 161
100% 543(longest request)
|
استفاده از xcache سرعت اجرای صفحهها را تقریبا به دو برابر افزایش میدهد.