2GB RAM E6500 CPU पर एक दिन में 10K + वर्डप्रेस विचारों के लिए अपाचे को ऑप्टिमाइज़ करें


10

मेरे पास एक समर्पित सर्वर है जिसमें एक दिन में लगभग 10K + पेजव्यू के साथ अपने वर्डप्रेस ब्लॉग को सर्व करने वाले ubuntu पर apache / php है। मेरे पास AP3 के साथ W3TC प्लग इनस्टॉल है।

लेकिन हर अब और फिर सर्वर जवाब देना बंद कर देता है या धीमी गति से चला जाता है और मुझे इसे वापस लेने के लिए अपाचे को पुनरारंभ करना पड़ता है।

मैं क्या कर रहा हूँ मैं गलत कर रहा हूँ?

ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
TimeOut 40
KeepAlive on
MaxKeepAliveRequests 200
KeepAliveTimeout 2
<IfModule mpm_prefork_module>
  StartServers 5
  MinSpareServers 5
  MaxSpareServers 8
  ServerLimit        80
  MaxClients         80
  MaxRequestsPerChild 1000
</IfModule>
<IfModule mpm_worker_module>
  StartServers       3
  MinSpareServers    3
  MaxSpareServers    3
  ServerLimit        80
  MaxClients         80
  MaxRequestsPerChild  1000
</IfModule>
<IfModule mpm_event_module>
  StartServers       3
  MinSpareServers    3
  MaxSpareServers    3
  ServerLimit        80
  MaxClients         80
  MaxRequestsPerChild  1000
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
  Satisfy all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel error
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
Include /etc/apache2/conf.d/
Include /etc/apache2/sites-enabled/

जवाबों:


23

मेरा वर्डप्रेस प्रदर्शन और कैशिंग स्टैक

यह निम्न से मध्यम श्रेणी के एकल सर्वर या वीपीएस के लिए एक शानदार वर्डप्रेस प्रदर्शन स्टैक है। मैं लगभग 1G मेमोरी और काफी तेज ड्राइव के साथ मिड रेंज को सिंगल कोर के रूप में वर्गीकृत कर रहा हूं।

आपके बॉक्स पर यह प्रति घंटे 10K पृष्ठ दृश्यों में सेवारत करने में सक्षम होगा

सर्वर स्टैक

  • लिनक्स - या तो डेबियन लेन या उबंटू
  • Nginx - रिवर्स प्रॉक्सी स्टेटिक फ़ाइल कैश के रूप में कॉन्फ़िगर किया गया
  • Apache - Apache वैकल्पिक पोर्ट पर Nginx द्वारा लोड किए गए PHP को हैंडल करेगा
  • MySql - WP द्वारा आवश्यक, सुनिश्चित करें कि आपका नवीनतम स्थिर संस्करण चल रहा है
  • PHP - 5.2 या 5.3 शाखा का नवीनतम स्थिर संस्करण

PHP कैश

  • APC - इसे कम से कम 128 M के mmap मेमोरी और shm आकार के साथ कॉन्फ़िगर करें

वर्डप्रेस प्रदर्शन प्लगइन स्टैक

  • Nginx प्रॉक्सी कैश इंटीग्रेटर
  • W3 कुल कैश - डिस्क में एन्हांस की गई, डिस्क को छोटा करें और APC को db और एपीसी को पेज कैश सेट करें।
  • सेल्फ होस्टेड CDN - 4 cname उपनाम बनाएँ जो सर्वर पर डोमेन को इंगित करता है बस स्थैतिक फ़ाइल की सेवा के लिए सेट अप करें

W3 टोटल कैश के साथ हम पेज कैश के लिए डिस्क का उपयोग कर रहे हैं और मिनिफाई करते हैं क्योंकि Nginx हमारी स्टैटिक फाइल्स को बहुत तेजी से सर्व करेगा।

स्थिर फ़ाइलों की सेवा करने के लिए और अपाचे के लिए PHP पास करने के लिए Nginx को कैसे कॉन्फ़िगर करें

अकेले अपाचे का उपयोग करने में समस्या यह है कि यह एक कनेक्शन खोलता है और स्थिर फ़ाइलों के लिए भी हर अनुरोध पर php को हिट करता है। यह कनेक्शन बर्बाद करता है क्योंकि अपाचे उन्हें खुला रखेगा और जब आपके पास बहुत सारे ट्रैफ़िक होंगे तो आपके कनेक्शन का उपयोग नहीं किया जाएगा, भले ही उनका कनेक्शन काट दिया जाए।

डिफ़ॉल्ट रूप से Apache पोर्ट 80 पर अनुरोधों के लिए सुनता है जो डिफ़ॉल्ट वेब पोर्ट है। सबसे पहले हम पोर्ट 8080 पर सुनने के लिए अपने Apache conf और वर्चुअल होस्ट फ़ाइलों में बदलाव करने जा रहे हैं।

अपाचे विन्यास

httpd.conf

KeepAlive को बंद करने के लिए सेट करें

ports.conf

NameVirtualHost *:8080
Listen 8080

प्रति साइट वर्चुअल होस्ट

<VirtualHost 127.0.0.1:8080>
     ServerAdmin info@yoursite.com
     ServerName yoursite.com
     ServerAlias www.yoursite.com
     DocumentRoot /srv/www/yoursite.com/public_html/
     ErrorLog /srv/www/yoursite.com/logs/error.log
     CustomLog /srv/www/yoursite.com/logs/access.log combined
</VirtualHost>

आपको mod_rpaf भी स्थापित करना चाहिए ताकि आपके लॉग में आपके विज़िटर के असली आईपी पते शामिल हों। यदि आपके लॉग की उत्पत्ति आईपी पते के रूप में 127.0.0.1 नहीं होगी।

Nginx विन्यास

डेबियन पर आप रिपॉजिटरी को स्थापित करने के लिए उपयोग कर सकते हैं लेकिन उनमें केवल संस्करण 0.6.33 है। बाद के संस्करण को स्थापित करने के लिए आपको लेनी बैकपोर्ट पैकेज को जोड़ना होगा

$ nano /etc/apt/sources.list

इस लाइन को फाइल में जोड़ें deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

फ़ाइल में निम्न जोड़ें:

Package: nginx
Pin: release a=lenny-backports 
Pin-Priority: 999

पैकेज सत्यापित करने और अपने सिस्टम के पैकेज डेटाबेस को अपडेट करने के लिए backports.org से कुंजी आयात करने के लिए निम्न आदेश जारी करें:

$ wget -O - http://backports.org/debian/archive.key | apt-key add -
$ apt-get update

अब apt-get के साथ इंस्टॉल करें

apt-get install nginx

यह स्रोत से संकलन की तुलना में बहुत आसान है।

Nginx conf और सर्वर फाइलें कॉन्फिगर करती हैं

nginx.conf

user www-data;
worker_processes  4;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log  /var/log/nginx/access.log;
    client_body_temp_path /var/lib/nginx/body 1 2;
    gzip_buffers 32 8k;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;

  gzip_comp_level   6;
  gzip_http_version 1.0;
  gzip_min_length   0;
  gzip_types        text/html text/css image/x-icon
        application/x-javascript application/javascript text/javascript application/atom+xml application/xml ;



    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

अब आपको अपना Nginx वर्चुअल होस्टिंग सेट अप करना होगा। मैं साइटों-उपलब्ध निर्देशिका में एक फ़ाइल से जुड़े प्रत्येक होस्ट की सहानुभूति के साथ साइटों-सक्षम पद्धति का उपयोग करना पसंद करता हूं।

$ mkdir /etc/nginx/sites-available  
$ mkdir /etc/nginx/sites-enabled
$ touch /etc/nginx/sites-available/yourservername.conf
$ touch /etc/nginx/sites-available/default.conf
$ ln -s  /etc/nginx/sites-available /etc/nginx/sites-enabled
$ nano /etc/nginx/sites-enabled/default.conf

default.conf

ध्यान दें:

निम्न फ़ाइलों में स्थिर कैश सेटिंग्स केवल तभी काम करेंगी जब Nginx प्रॉक्सी कैश इंटीग्रेटर प्लगइन सक्षम हो।

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=staticfilecache:180m  max_size=500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 30;
proxy_read_timeout 120;
proxy_send_timeout 120;

#IMPORTANT - this sets the basic cache key that's used in the static file cache.
proxy_cache_key "$scheme://$host$request_uri";

upstream wordpressapache {
        #The upstream apache server. You can have many of these and weight them accordingly,
        #allowing nginx to function as a caching load balancer 
        server 127.0.0.1:8080 weight=1 fail_timeout=120s;
}

वर्डप्रेस साइट कॉन्फिडेंस (मल्टी साइट के लिए आपको केवल एक vhost की आवश्यकता होगी)

server {
        #Only cache 200 responses, and for a default of 20 minutes.
        proxy_cache_valid 200 20m;

        #Listen to your public IP
        listen 80;

        #Probably not needed, as the proxy will pass back the host in "proxy_set_header"
        server_name www.yoursite.com yoursite.com;
        access_log /var/log/nginx/yoursite.proxied.log;  

        # "combined" matches apache's concept of "combined". Neat.
        access_log  /var/log/apache2/nginx-access.log combined;
        # Set the real IP.
        proxy_set_header X-Real-IP  $remote_addr;

        # Set the hostname
        proxy_set_header Host $host;

        #Set the forwarded-for header.
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
                        # If logged in, don't cache.
                        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                                set $do_not_cache 1;
                        }
                        proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
                        proxy_cache staticfilecache;
                        proxy_pass http://wordpressapache;
        }

        location ~* wp\-.*\.php|wp\-admin {
                        # Don't static file cache admin-looking things.
                        proxy_pass http://wordpressapache;
        }

        location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
                        # Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header,
                        # whether logged in or not (may be too heavy-handed).
                        proxy_cache_valid 200 120m;
                        expires 864000;
                        proxy_pass http://wordpressapache;
                        proxy_cache staticfilecache;
        }

        location ~* \/[^\/]+\/(feed|\.xml)\/? {
 # Cache RSS looking feeds for 45 minutes unless logged in.
                        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                                set $do_not_cache 1;
                        }
                        proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
                        proxy_cache_valid 200 45m;
                        proxy_cache staticfilecache;
                        proxy_pass http://wordpressapache;
        }

        location = /50x.html {
                root   /var/www/nginx-default;
        }

        # No access to .htaccess files.
        location ~ /\.ht {
                deny  all;
        }

        }

सेल्फ होस्टेड सीडीएन कॉन्फिडेंस

अपने स्वयं के होस्ट किए गए सीडीएन के लिए आपको केवल प्रॉक्सी पास के बिना स्थिर फ़ाइलों की सेवा के लिए इसे सेट करने की आवश्यकता है

server {

        proxy_cache_valid 200 20m;
        listen 80;
        server_name yourcdndomain.com;
        access_log   /srv/www/yourcdndomain.com/logs/access.log;
        root   /srv/www/yourcdndomain.com/public_html/;

 proxy_set_header X-Real-IP  $remote_addr;

      location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
                                # Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header,
                                # whether logged in or not (may be too heavy-handed).

                                proxy_cache_valid 200 120m;
                        expires 7776000;
                        proxy_cache staticfilecache;
                }

location = /50x.html {
                root   /var/www/nginx-default;
        }

 # No access to .htaccess files.
        location ~ /\.ht {
          deny  all;
        }

    }

अब सर्वर शुरू करें

$ /etc/init.d/apache2 restart  
$/etc/init.d/nginx start

बेंचमार्क परिणाम

अपाचे बेंच पर यह सेटअप सैद्धांतिक रूप से प्रति सेकंड 1833.56 अनुरोधों को पूरा कर सकता है

$ ab -n 1000 -c 20 http://yoursite.com/

वैकल्पिक शब्द


आपने उल्लेख किया है कि नगीनक्स स्टैटिक फाइल्स और एपाचे हैंडल php फाइल्स को संभालता है, लेकिन स्टैटिक फाइल्स में आपको "प्रॉक्सी_पास वर्डप्रेसपैक " ब्लॉक होता है । इसका मतलब यह नहीं है कि अपाचे स्थिर फ़ाइलों को संभाल रहा है?
श्रीचूलो

0

यह एक मानक अपाचे विन्यास जैसा दिखता है, हालांकि ऐसा लगता है कि इसमें से कुछ इसे HTML की तरह दिखने के कारण छीन लिया गया है।

आपको यह जांचने की आवश्यकता है कि जब आपका सर्वर धीरे-धीरे प्रतिक्रिया करता है तो क्या हो रहा है। आप अपने सर्वर के चश्मे नहीं कहते हैं, लेकिन आप इसके समर्पित होने का उल्लेख करते हैं और 10k / दिन को आसानी से नियंत्रित किया जाना चाहिए।

  • शीर्ष क्या दिखाता है?
  • अड़चन कहां है? सीपीयू, मेमोरी, आई / ओ रुको?
  • कितने अपाचे प्रक्रियाएं चल रही हैं?
  • Netstat में कितने कनेक्शन दिखाए गए हैं?

अनुमान है, CPU शायद PHP के कारण आने वाली अड़चन है। एपीसी और एक WP कैशिंग प्लगइन का उपयोग करना इस को कम करने के लिए अच्छे तरीके हैं, जो आपने पहले ही किया है। आप "Prefork" के बजाय Apache के "MPM" प्रक्रिया मॉडल को भी आज़मा सकते हैं। सुनिश्चित करें कि आपके पास APC को पर्याप्त मेमोरी आवंटित है ताकि वह आपकी PHP स्क्रिप्ट को कैश कर सके और 'मिस' न हो।

यह MySQL भी हो सकता है - देखें कि क्या thats सीपीयू या डिस्क को हॉगिंग करता है।

यदि आपने इसे सक्षम किया है, तो mod_deflate को बंद करने पर विचार करें - यह लोड समय को लाभ प्रदान करता है, लेकिन CPU लोड बढ़ा सकता है। कोशिश करने लायक हो सकता है।

अपने सर्वर को बेंचमार्क करने के लिए 'घेराबंदी' या 'अब' जैसे टूल का उपयोग करें और यह पता लगाएं कि आपका सर्वर धीमा है।

वेबसर्वर प्रदर्शन ट्यूनिंग से मेरे कुछ बुकमार्क यहां दिए गए हैं: http://articles.slicehost.com/2010/5/19/configuring-the-apache-mpm-on-ubuntu

http://www.thebuzzmedia.com/increase-wordpress-performance-on-apache-with-worker-mpm-php-and-mod_fcgid/

http://www.devside.net/articles/apache-performance-tuning

http://www.brandonturner.net/blog/2009/07/fastcgi_with_php_opcode_cache/

लेकिन मेरी मूल सलाह वही है - पता करें कि क्या अड़चन पहली है! अन्यथा आप नेत्रहीन रूप से प्रदर्शन में सुधार करने की कोशिश कर रहे हैं (और निश्चित रूप से, प्रदर्शन में सुधार हमेशा अच्छा होता है) लेकिन यह जानने के बिना कि आपका ध्यान किस क्षेत्र में है।


0

सर्वर-स्टेटस मॉड्यूल को भी सक्षम करें और यह जानने के लिए कि क्या हो रहा है।

आपको अदला-बदली हो सकती है। क्या आपने vmstat की जाँच की है जबकि यह हो रहा है? 80 MaxClients के लिए 2GB RAM प्रत्येक के लिए केवल 25 MB है (यह मानकर कि बॉक्स कुछ और नहीं कर रहा है।) आपका MaxClients बहुत अधिक हो सकता है। इसके लिए समाधान स्पष्ट है: अधिक RAM या कम MaxClients जोड़ें। यदि कमांड लाइन अपाचे को पुनरारंभ करने पर प्रतिक्रिया करने के लिए धीमी है, तो यह इस स्थिति का एक संकेत है।

यह भी संभव है कि आप 'बड़े' फाइलों के साथ कुछ मोबाइल ग्राहकों (या धीमे कनेक्शन पर अन्य ग्राहकों) को खिला रहे हों, जिससे आपके सभी उपलब्ध फर्जी स्लॉट्स का उपभोग हो। हो सकता है कि आपके पास बहुत कम MaxClients हों। सर्वर-स्थिति की जांच करने से आपको पता चलेगा कि उस समय उनमें से प्रत्येक ग्राहक क्या कर रहा है। इस स्थिति के लिए एक समाधान MaxClients (लेकिन यह भी ऊपर की स्थिति में बदल सकता है।) इसके लिए एक बेहतर समाधान अपाचे के सामने एक HTTP त्वरक स्थापित करना है (एक मुफ्त विकल्प perlbal है।) यदि आपकी कमांड लाइन सामान्य है। गति जब आप अपाचे को पुनरारंभ करते हैं, तो यह इस स्थिति का एक संकेत है।


0

Mod_status का उपयोग कई अपाचे उदाहरणों के अंदर क्या हो रहा है, यह देखने का तरीका है, लेकिन कृपया ध्यान दें कि यह वास्तव में प्रदर्शन को कमजोर करेगा। यह स्मृति खाने के लिए लगता है और एक मामले में मैं निदान करने में सक्षम नहीं था अगर यह रिवर्स-प्रॉक्सी-केवल सेटिंग में एकल प्रक्रिया लॉकअप का कारण था जहां सीधे कुछ भी नहीं परोसा गया था। ये कोर्स उपयोगकर्ताओं द्वारा "पेज लोड करने में हमेशा के लिए लेता है" के रूप में रिपोर्ट किए जाते हैं। उन्हें यह भी समझ में नहीं आता है कि "यह प्रतीक्षा करने के लिए 10 और सेकंड होगा" और "यह कभी खत्म नहीं होगा" क्योंकि वे आमतौर पर कुछ (<10) सेकंड के बाद अपने ब्राउज़र में स्टॉप को हिट करते हैं।

यह भी जांच लें कि क्या आप सही स्थान को कॉन्फ़िगर कर रहे हैं (उदाहरणों की मात्रा / प्रक्रियाओं को देखने के बाद से mod_status का उपयोग करना आसान है)। कम से कम ubuntu के तहत स्टॉक कॉन्फिगरेशन में MPD मोड के लिए ifdef'ed सेक्शन हैं और जब आप प्रीफ़ॉर्क चला रहे हैं तो वर्कर मोड को एडिट करना आसान है (जैसा कि पारंपरिक ज्ञान से पता चलता है कि फ़्यूज़ कैफे नहीं है)।

ओह और सभी के अधिकांश: जड़ के रूप में ऊपर चलाएं और अधिकतम बाहर ressources के लिए देखें। मेमोरी, डिस्क, सीपीयू - आप देखेंगे।

एक और: mod_deflate को निष्क्रिय करने का विचार अच्छा हो सकता है, हालांकि आपकी सेटिंग गलत कंटेंट-लेंथ जानकारी की त्रुटि से ग्रस्त नहीं है, जिसके कारण ब्राउज़र आपको "हमेशा के लिए" मृत धीमी "" रिपोर्ट नहीं "" "" की सूचना देते हुए डेटा का इंतजार करता है।

BTW: 10K इस मशीन पर प्रति दिन प्लस मीडिया फ़ाइलों के लिए पृष्ठों को वितरित किया जाना चाहिए केवल एक समस्या है अगर वे सभी एक घंटे में आते हैं।


0

कुछ सलाह, खासकर अगर आप बहुत सारी मीडिया फ़ाइलों की मेजबानी करते हैं:

  • अपने मेडिस को एक समर्पित अपाचे (या बेहतर: नगनेक्स) उदाहरण में ले जाएं। कोई PHP, कोई मॉड्यूल नहीं, केवल एक नंगे http सर्वर जो मेडियस को यथासंभव तेज़ी से वितरित करेगा।
  • कैश, कैश, कैश! WordPress पर सुपर कैश प्लगइन का उपयोग करें। यह बहुत मदद करता है।
  • हेडर पर अपने अपाचे कॉन्फ़िगरेशन की जाँच करें। सत्यापित करें कि छवियां और अन्य "स्थिर" मेडिस के पास एक समाप्ति समय एक दूर की तारीख के लिए निर्धारित है और यह कि आपके अपाचे क्लाइंट द्वारा अनुरोध किए जाने पर एक HTTP 304 कोड लौटाता है
  • Mod_deflate सक्षम करें। यह ग्राहकों द्वारा प्रदर्शन को कम कर सकता है तेजी से कार्य किया जाएगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.