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
فایل را از حالت فشرده خارج میکنیم.
unzip master
cd xcache-master/
ابزارهای لازم برای کامپایل و نصب برنامه را نصب میکنیم.
yum -y install php-devel yum install -y gcc 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 را با پسورد خود جایگزین کنید).
echo -n "pass"| md5sum
دستور زیر را در خط فرمان سرور اجرا کنید و خروجی را در قسمت xcache.count بنویسید.
cat /proc/cpuinfo |grep -c processor
فایل تنظیمات نمونه:
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
سرویس آپاچی را ریاستارت میکنیم.
service httpd restart
چنانه نصب 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 -n 10000 http://192.168.0.1/wordpress/
خروجی برنامه به شکل زیر است.
[root@server local]# ab -n 10000 http://192.168.0.1/wordpress/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.0.1 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Apache/2.2.15 Server Hostname: 192.168.0.1 Server Port: 80 Document Path: /wordpress/ Document Length: 7876 bytes Concurrency Level: 1 Time taken for tests: 753.403 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 81260000 bytes HTML transferred: 78760000 bytes 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 within a certain 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/
آپاچی را ریاستارت میکنیم.
service httpd restart
سپس مجدا دستور زیر را در یک سرور اجرا میکنیم.
ab -n 10000 http://192.168.0.1/wordpress/
خروجی به این صورت است.
[root@server local]# ab -n 10000 http://192.168.0.1/wordpress/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.0.1 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Apache/2.2.15 Server Hostname: 192.168.0.1 Server Port: 80 Document Path: /wordpress/ Document Length: 7876 bytes Concurrency Level: 1 Time taken for tests: 1465.429 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 81260000 bytes HTML transferred: 78760000 bytes 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 within a certain time (ms) 50% 146 66% 147 75% 148 80% 149 90% 151 95% 154 98% 158 99% 161 100% 543 (longest request)
استفاده از xcache سرعت اجرای صفحهها را تقریبا به دو برابر افزایش میدهد.
1 دیدگاه. دیدگاه تازه ای بنویسید
سلام
مطلب جالب و پر کاربردی بود.