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 = ۳۲M
xcache.count = ۱
xcache.ttl = ۳۶۰۰
xcache.gc_interval = ۳۰۰
|
سرویس آپاچی را ریاستارت میکنیم.
۱ |
service httpd restart
|
چنانه نصب xcache به درستی انجام شده باشد با اجرای دستور php -v باید پیام زیر نمایش داده شود.
۱
۲
|
php -v
with XCache v1.۲.۱, Copyright (c) ۲۰۰۵-۲۰۰۷
|
تست:
اما آیا پس از نصب xcache سرعت اجرای اسکریپتهای پیاچپی واقعا افزایش یافته است؟ برای پاسخ به این سئوال سرعت اجرای صفحات را با استفاده از برنامه ab بررسی میکنیم.
نکته: برنامه ab که به نام Apache benchmark نیز شناخته میشود. ابزاری برای بررسی و تست وبسرور آپاچی است.
روی سرور وردپرس را با تنظیمات پیش فرض نصب میکنیم. مسیر نصب وردپرس به شکل زیر خواهد بود.
۱ |
http://۱۹۲.۱۶۸.۰.۱/wordpress/
|
تست سرور در حالت فعال بودن xcache:
از سرور دیگری برنامه ab را به شکل زیر اجرا میکنیم.
۱ |
ab -n ۱۰۰۰۰ http://۱۹۲.۱۶۸.۰.۱/wordpress/
|
خروجی برنامه به شکل زیر است.
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
۲۰
۲۱
۲۲
۲۳
۲۴
۲۵
۲۶
۲۷
۲۸
۲۹
۳۰
۳۱
۳۲
۳۳
۳۴
۳۵
۳۶
۳۷
۳۸
۳۹
۴۰
۴۱
۴۲
۴۳
۴۴
۴۵
۴۶
۴۷
۴۸
۴۹
۵۰
۵۱
۵۲
۵۳
۵۴
|
[root@server local]# ab -n 10000 http://192.168.0.1/wordpress/
This is ApacheBench, Version ۲.۳ <$Revision: ۶۵۵۶۵۴ $>
Copyright ۱۹۹۶ Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking ۱۹۲.۱۶۸.۰.۱ (be patient)
Completed ۱۰۰۰ requests
Completed ۲۰۰۰ requests
Completed ۳۰۰۰ requests
Completed ۴۰۰۰ requests
Completed ۵۰۰۰ requests
Completed ۶۰۰۰ requests
Completed ۷۰۰۰ requests
Completed ۸۰۰۰ requests
Completed ۹۰۰۰ requests
Completed ۱۰۰۰۰ requests
Finished ۱۰۰۰۰ requests
Server Software: Apache/۲.۲.۱۵
Server Hostname: ۱۹۲.۱۶۸.۰.۱
Server Port: ۸۰
Document Path: /wordpress/
Document Length: ۷۸۷۶ bytes
Concurrency Level: ۱
Time taken for tests: ۷۵۳.۴۰۳ seconds
Complete requests: ۱۰۰۰۰
Failed requests: ۰
Write errors: ۰
Total transferred: ۸۱۲۶۰۰۰۰ bytes
HTML transferred: ۷۸۷۶۰۰۰۰ bytes
Requests per second: ۱۳.۲۷ [#/sec] (mean)
Time per request: ۷۵.۳۴۰ [ms] (mean)
Time per request: ۷۵.۳۴۰ [ms] (mean, across all concurrent requests)
Transfer rate: ۱۰۵.۳۳ [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: ۰ ۱ ۱.۴ ۱ ۲۸
Processing: ۷۲ ۷۴ ۳.۴ ۷۴ ۲۶۲
Waiting: ۶۱ ۷۳ ۳.۰ ۷۳ ۲۶۱
Total: ۷۲ ۷۵ ۳.۷ ۷۴ ۲۶۲
Percentage of the requests served within a certain time (ms)
۵۰% ۷۴
۶۶% ۷۵
۷۵% ۷۶
۸۰% ۷۶
۹۰% ۷۹
۹۵% ۸۱
۹۸% ۸۵
۹۹% ۸۷
۱۰۰% ۲۶۲ (longest request)
|
تست سرور در حالت غیر فعال بودن xcache:
فایل تنظیم xcache را با دستور زیر به دایرکتوری /root منتقل میکنیم. (با حذف فایل تنظیمات xcache غیر فعال میشود.)
۱ |
mv /etc/php.d/xcache.ini /root/
|
آپاچی را ریاستارت میکنیم.
۱ |
service httpd restart
|
سپس مجدا دستور زیر را در یک سرور اجرا میکنیم.
۱ |
ab -n ۱۰۰۰۰ http://۱۹۲.۱۶۸.۰.۱/wordpress/
|
خروجی به این صورت است.
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
۲۰
۲۱
۲۲
۲۳
۲۴
۲۵
۲۶
۲۷
۲۸
۲۹
۳۰
۳۱
۳۲
۳۳
۳۴
۳۵
۳۶
۳۷
۳۸
۳۹
۴۰
۴۱
۴۲
۴۳
۴۴
۴۵
۴۶
۴۷
۴۸
۴۹
۵۰
۵۱
۵۲
۵۳
۵۴
|
[root@server local]# ab -n 10000 http://192.168.0.1/wordpress/
This is ApacheBench, Version ۲.۳ <$Revision: ۶۵۵۶۵۴ $>
Copyright ۱۹۹۶ Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking ۱۹۲.۱۶۸.۰.۱ (be patient)
Completed ۱۰۰۰ requests
Completed ۲۰۰۰ requests
Completed ۳۰۰۰ requests
Completed ۴۰۰۰ requests
Completed ۵۰۰۰ requests
Completed ۶۰۰۰ requests
Completed ۷۰۰۰ requests
Completed ۸۰۰۰ requests
Completed ۹۰۰۰ requests
Completed ۱۰۰۰۰ requests
Finished ۱۰۰۰۰ requests
Server Software: Apache/۲.۲.۱۵
Server Hostname: ۱۹۲.۱۶۸.۰.۱
Server Port: ۸۰
Document Path: /wordpress/
Document Length: ۷۸۷۶ bytes
Concurrency Level: ۱
Time taken for tests: ۱۴۶۵.۴۲۹ seconds
Complete requests: ۱۰۰۰۰
Failed requests: ۰
Write errors: ۰
Total transferred: ۸۱۲۶۰۰۰۰ bytes
HTML transferred: ۷۸۷۶۰۰۰۰ bytes
Requests per second: ۶.۸۲ [#/sec] (mean)
Time per request: ۱۴۶.۵۴۳ [ms] (mean)
Time per request: ۱۴۶.۵۴۳ [ms] (mean, across all concurrent requests)
Transfer rate: ۵۴.۱۵ [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: ۰ ۱ ۱.۳ ۰ ۲۲
Processing: ۱۳۹ ۱۴۶ ۶.۰ ۱۴۵ ۵۴۲
Waiting: ۱۱۵ ۱۴۵ ۵.۵ ۱۴۴ ۵۴۱
Total: ۱۴۰ ۱۴۶ ۶.۲ ۱۴۶ ۵۴۳
Percentage of the requests served within a certain time (ms)
۵۰% ۱۴۶
۶۶% ۱۴۷
۷۵% ۱۴۸
۸۰% ۱۴۹
۹۰% ۱۵۱
۹۵% ۱۵۴
۹۸% ۱۵۸
۹۹% ۱۶۱
۱۰۰% ۵۴۳ (longest request)
|
استفاده از xcache سرعت اجرای صفحهها را تقریبا به دو برابر افزایش میدهد.
۱ دیدگاه. Leave new
سلام
مطلب جالب و پر کاربردی بود.