2013-02-20 53 views
12

मैं दिन देखने के लिए तलाश रहे हैं अगर किसी को एक अच्छा, दस्तावेज, पीएचपी प्रसंस्करण गतिपीएचपी प्रसंस्करण गति अपाचे 2.4 mpm-prefork mod_php 5.4 बनाम nginx 1.2.x पीएचपी-एफ पी एम 5.4

    के बीच तुलना किया है
  • अपाचे-mpm-prefork 2.4 mod_php 5,4

और

  • nginx 1.2.x + PHP-एफ पी एम 5,4
साथ

मैं क्यों देख रहा हूं: मैंने देखा एकमात्र परीक्षण बेंचमार्क, पूर्ण पृष्ठ या हैलो, विश्व-परीक्षण परीक्षण की सेवा करता है, बिना किसी परीक्षण के उचित दस्तावेज़ीकरण के। मुझे अनुरोध/सेकंड, हार्डवेयर की परवाह नहीं है, लेकिन मुझे यह देखने की ज़रूरत है कि PHP स्क्रिप्ट का परीक्षण किया गया था और किस सटीक कॉन्फ़िगरेशन के साथ।

क्यों इन दो: mod_php लेकिन एक बहुत (बस पीएचपी ही प्रसंस्करण कोई स्टैटिक फ़ाइलें, कोई अनुरोध/प्रतिक्रिया को मापने,) प्रसंस्करण पीएचपी पर सबसे तेजी से होने के लिए जाना जाता था तब से बदल गया है, अपाचे संस्करण भी शामिल है। Nginx और PHP-FPM बहुत कम स्मृति खाता है, इसलिए आर्किटेक्चर को बदलने का यह एक अच्छा कारण होगा, लेकिन यदि वे इस मामले में पर्याप्त तेज़ नहीं हैं, तो परिवर्तन अप्रासंगिक होगा।

मैं जानता हूँ कि अगर मैं एक मैं इसे अपने आप क्या करना है खोजने में असमर्थ हूँ, लेकिन मैं विश्वास नहीं कर सकता कि कोई भी इस तरह के एक परीक्षण अब तक :)

+0

"बस PHP को संसाधित करना" न तो mod_php और न ही php-fpm php प्रोसेसिंग स्वयं करता है। वे सिर्फ एक एम्बेड दुभाषिया कहते हैं जो उनके लिए सभी नौकरी करता है। और दोनों मामलों में PHP दुभाषिया समान है। – VBart

+0

नहीं, यह पूरी तरह से नहीं, या अधिक सटीक नहीं है। पहले मामले में दुभाषिया को अपाचे के लिए मॉड्यूल के रूप में बनाया गया है, जिसका अर्थ है कि यह मूल रूप से अपाचे के अंदर चल रहा है, इसके हिस्से के रूप में, जबकि दूसरा एफपीएम है, जो एक फास्टसीजीआई सेवा है जिसे थोड़ी देर के लिए PHP के साथ भेज दिया गया है। हालांकि उत्तर में स्पष्ट रूप से nginx और FPM सर्वर के बीच संचार समय शामिल होगा, जो इस मामले में प्रसंस्करण समय का हिस्सा है। क्षमा करें अगर प्रश्न पूरी तरह स्पष्ट नहीं था। – petermolnar

उत्तर

12

किया है मैं CentOS 6.3 पर इस परीक्षण पूरा कर लिया है nginx 1.2.7, apache 2.4.3 और php 5.4.12 का उपयोग करके सभी को डिफ़ॉल्ट रूप से कोई बदलाव नहीं मिला है।

./configure 
make && make install 
php के अपवाद मैं कहाँ सक्षम php-एफ पी एम

./configure --enable-fpm 

साथ

सभी सर्वर के रूप में नीचे उल्लिखित को छोड़कर 100% डिफ़ॉल्ट config है। सभी परीक्षण परीक्षण सर्वर पर किए गए थे, परीक्षण के बीच कोई लोड और रीबूट नहीं था।

<?php 

$testing = 0; 

for ($i = 0; $i < 1000; $i++) { 

    $testing++; 

} 

echo $testing; 

मैं भी: सर्वर एक इंटेल (आर) जिऑन (आर) सीपीयू E3-1230 है, RAID में 1GB RAM और 2 एक्स 60GB SSD 1. टेस्ट ab -n 50000 -c 500 http://127.0.0.1/test.php

टेस्ट PHP स्क्रिप्ट का उपयोग कर चलाए गए nginx.conf में php को सक्षम करना था क्योंकि यह डिफ़ॉल्ट रूप से सक्षम नहीं है।

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; 
    include  fastcgi_params; 
} 

Nginx - पीएचपी-एफ पी एम पर 127.0.0.1:9000

Concurrency Level:  500 
Time taken for tests: 10.932 seconds 
Complete requests:  50000 
Failed requests:  336 
    (Connect: 0, Receive: 0, Length: 336, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  336 
Total transferred:  7837824 bytes 
HTML transferred:  379088 bytes 
Requests per second: 4573.83 [#/sec] (mean) 
Time per request:  109.317 [ms] (mean) 
Time per request:  0.219 [ms] (mean, across all concurrent requests) 
Transfer rate:   700.17 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 34 338.5  0 7000 
Processing:  0 34 166.5  23 8120 
Waiting:  0 34 166.5  23 8120 
Total:   13 68 409.2  23 9846 

Percentage of the requests served within a certain time (ms) 
    50%  23 
    66%  28 
    75%  32 
    80%  33 
    90%  34 
    95%  46 
    98%  61 
    99% 1030 
100% 9846 (longest request) 

Nginx - पीएचपी-एफ पी एम सॉकेट के माध्यम से (fastcgi_pass को config परिवर्तन)

fastcgi_pass unix:/var/lib/php/php.sock; 

Concurrency Level:  500 
Time taken for tests: 7.054 seconds 
Complete requests:  50000 
Failed requests:  351 
    (Connect: 0, Receive: 0, Length: 351, Exceptions: 0) 
Write errors:   0 
Non-2xx responses:  351 
Total transferred:  7846209 bytes 
HTML transferred:  387083 bytes 
Requests per second: 7087.70 [#/sec] (mean) 
Time per request:  70.545 [ms] (mean) 
Time per request:  0.141 [ms] (mean, across all concurrent requests) 
Transfer rate:   1086.16 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 26 252.5  0 7001 
Processing:  0 24 112.9  17 3683 
Waiting:  0 24 112.9  17 3683 
Total:   7 50 306.4  17 7001 

Percentage of the requests served within a certain time (ms) 
    50%  17 
    66%  19 
    75%  20 
    80%  21 
    90%  23 
    95%  31 
    98%  55 
    99% 1019 
100% 7001 (longest request) 

अपाचे - mod_php

Concurrency Level:  500 
Time taken for tests: 10.979 seconds 
Complete requests:  50000 
Failed requests:  0 
Write errors:   0 
Total transferred:  9800000 bytes 
HTML transferred:  200000 bytes 
Requests per second: 4554.02 [#/sec] (mean) 
Time per request:  109.793 [ms] (mean) 
Time per request:  0.220 [ms] (mean, across all concurrent requests) 
Transfer rate:   871.67 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 22 230.2  1 7006 
Processing:  0 58 426.0  18 9612 
Waiting:  0 58 425.9  18 9611 
Total:   5 80 523.8  19 10613 

Percentage of the requests served within a certain time (ms) 
    50%  19 
    66%  23 
    75%  25 
    80%  26 
    90%  31 
    95%  36 
    98% 1012 
    99% 1889 
100% 10613 (longest request) 

मैं धुन से खुश रहूंगा अपाचे आगे, लेकिन ऐसा लगता है कि अपाचे बस नहीं रह सकता है। स्पष्ट विजेता सॉकेट के माध्यम से php-fpm के साथ nginx है।

+1

इसके लिए धन्यवाद, यह काफी रोचक है, हालांकि ऐसी कोई चीज है जो मुझे समझती है: दोनों nginx सेटअप के साथ असफल अनुरोध हैं जबकि यह अपाचे के साथ नहीं हुआ है। क्या आपको कोई विचार है क्यों? – petermolnar

+0

यह त्रुटि है [त्रुटि] 725 # 0: * 200854 कनेक्ट() यूनिक्स के लिए: /var/lib/php/php.sock विफल (11: संसाधन अस्थायी रूप से अनुपलब्ध) अपस्ट्रीम से कनेक्ट करते समय, क्लाइंट: 127.0.0.1, सर्वर: लोकलहोस्ट, अनुरोध: "प्राप्त करें /test.php HTTP/1.0", अपस्ट्रीम: "fastcgi: // unix: /var/lib/php/php.sock:", होस्ट: "127.0.0.1" हर बार अक्सर , मानक कॉन्फ़िगरेशन पर आपको '502 खराब गेटवे' प्राप्त होगा जब nginx बैक एंड तक नहीं जा सकता है, या बैक एंड 'चला जाता है'। – sjdaws

+0

आप कर्नेल परम को रूट करने का प्रयास कर सकते हैं, अर्थात् net.core.somaxconn sysctl.conf में, उदाहरण के लिए 8192 तक, यह इस तरह की त्रुटि उत्पन्न करने के लिए पर्याप्त नहीं होना चाहिए। – petermolnar

-4

ऐसा लगता है कि आप संतरे से सेब की तुलना कर रहे हैं, या अधिक सटीक रूप से रखने के लिए, आप दो चर समायोजित करके परिणामों को उलझन में डाल रहे हैं। निश्चित रूप से, यह nginx + php-fpm के खिलाफ अपाचे + fastcgi + php-fpm की तुलना करना अधिक समझदार होगा? आप php-fpm भाग को समान होने की अपेक्षा करेंगे, तो आप Apache_fastcgi बनाम nginx के बेहतर मापेंगे।

+0

मुझे इस विशिष्ट परिदृश्य के जवाब की आवश्यकता थी क्योंकि कंपनी के लिए सवाल यह तय करना था कि किस दिशा में जाना है। – petermolnar