افزایش سرعت برنامه‌های php

1 دیدگاه
دسته بندی: آموزش, لینوکس
افزایش سرعت برنامه‌های php

php چگونه کار می‌کند: هرگاه مفسر php برنامه‌ای را تفسیر می‌کند هر دستور را به opcodes تبدیل می‌کند و این کد را اجرا می‌کند. عملیاتی که در هنگام اجرای یک کد php انجام می‌شود به صورت خلاصه به این شکل است:

آپاچی (و یا سایر برنامه‌ها) کد php را برای اجرا به مفسر می‌دهند مفسر پس از خواندن کد، کد را تفسیر می‌کند و خروجی تولید می‌کند که tokens نامیده می‌شود سپس tokens را کامپایل می‌کند و خروجی opcodes را که خروجی نهایی است تولید می‌کند. و در نهایت این خروجی را اجرا می‌کند.

نکته: opcodes با زبان ماشین و یا Machine code متفاوت است. زبان ماشین وابسته به سخت‌افزار است و مستقیما روی سخت‌افزار اجرا می‌شود اما opcode غیر وابسته با سخت‌افزار است و بوسیله مفسر php اجرا می‌شود.

مشکل کجاست: با هر بار نمایش یک صفحه وب پروسه تفسیر کد php به کد opcode بوسیله مفسر php انجام می‌شود در نتیجه این عملیات تکراری علاوه بر مصرف منابع سخت‌افزاری سرعت اجرای صفحات را کم می‌کند.

راه‌حل: برای افزایش سرعت اجرای کد‌های php می‌توانیم یکبار کد php را تفسیر کنیم و خروجی opcode حاصله را کش کنیم و با هر بار درخواست مجدد صفحه opcode کش شده را اجرا کنیم.

با استفاده از برنامه‌های زیر می‌توان  opcode را کش کرد و در نتیجه سرعت اجرای کد php را افزایش داد.

  1. برنامه APC که خلاصه شده (Alternative PHP Cache) است.
  2. برنامه MMCache که با نام Turck MMCache نیز شناخته می‌شود.
  3. برنامه XCache .
  4. برنامه eAccelerator.
  5. و بلاخره برنامه تجاری 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 سرعت اجرای صفحه‌ها را تقریبا به دو برابر افزایش می‌دهد.

امتیاز شما

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

راهنمای قدم به قدم نصب ماتومو (Matomo)

0
ماتومو «Matomo» یکی از ابزارهای قدرتمند و متن‌باز در حوزه تجزیه‌وتحلیل وب است که به کاربران امکان می‌دهد تا اطلاعات دقیق و ارزشمندی از عملکرد…
SDK چیست

SDK چیست و چه کاربردی دارد؟

0
در دنیای توسعه نرم‌افزارها، ابزارها و تکنولوژی‌های بسیاری برای تسهیل فرآیند ساخت و پیاده‌سازی اپلیکیشن‌ها وجود دارد. یکی از مهم‌ترین این ابزارها، SDK یا Software…

نظرات کاربران

1 دیدگاه. دیدگاه تازه ای بنویسید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست