Назад | Перейти на главную страницу

Повышенная загрузка ЦП и время отклика сервера

За последние 10 дней у меня внезапно увеличилась загрузка ЦП на моем веб-сайте, причем загрузка ЦП достигла 100% в три раза. В течение этого времени я не могу подключиться к моему сайту по SSH, поэтому я не мог понять, что на самом деле использует столько ресурсов процессора. Мой веб-сайт - это приложение Django, использующее Apache2, PostgreSQL и Memcached, размещенное на DigitalOcean (1 ГБ оперативной памяти, 30 ГБ SSD-диск, Ubuntu 14.04 x64).

Вот результат топа на данный момент.

top - 11:00:37 up  8:40,  1 user,  load average: 0.18, 0.21, 0.22
Tasks:  81 total,   2 running,  79 sleeping,   0 stopped,   0 zombie
%Cpu(s): 24.3 us,  2.3 sy,  0.0 ni, 69.1 id,  4.0 wa,  0.3 hi,  0.0 si,  0.0 st
KiB Mem:   1017948 total,   918656 used,    99292 free,   124816 buffers
KiB Swap:        0 total,        0 used,        0 free.   205868 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1084 www-data  20   0  833820 218516   5808 S 22.2 21.5   4:22.42 apache2
 3504 postgres  20   0  249560  22844  20036 S  3.0  2.2   0:00.09 postgres
  928 memcache  20   0  359596  35764    876 S  0.3  3.5   0:03.90 memcached
 1085 www-data  20   0  842852  14372   3044 S  0.3  1.4   0:19.76 apache2
 3477 root      20   0   24820   1532   1132 R  0.3  0.2   0:00.27 top
    1 root      20   0   33384   2688   1400 S  0.0  0.3   0:10.75 init
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.08 ksoftirqd/0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S  0.0  0.0   0:00.91 rcu_sched
    8 root      20   0       0      0      0 R  0.0  0.0   0:01.96 rcuos/0
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
   10 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
   12 root      rt   0       0      0      0 S  0.0  0.0   0:00.51 watchdog/0
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 khelper
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns

Вот файл конфигурации Apache

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Require all denied
</Directory>

<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Вот моя конфигурация VirtualHost

<VirtualHost *:80>

    RewriteEngine On
    RewriteCond %{HTTP_HOST}  ^example.com [nocase]
    RewriteRule ^(.*)         http://www.example.com$1 [last,redirect=301]

    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com

    WSGIDaemonProcess example python-path=/home/abc/example:/home/abc/example/env/lib/python2.7/site-packages
    WSGIProcessGroup example
    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptAlias / /home/abc/example/wsgi.py

    DocumentRoot /home/abc/example

    <Directory />
        Require all granted
    </Directory>

    Alias /static/ /home/abc/example/static/

    <Directory /home/abc/example/static>
        Order deny,allow
        Allow from all
    </Directory>

    Alias /media/ /home/abc/example/media/

    <Directory /home/abc/example/media>
        Order deny,allow
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Вот мой .htaccess

<FilesMatch "\.(ico|svg|woff|eot|ttf)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

<FilesMatch "\.(jpg|png|gif|css|js|json)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

<IfModule mod_mime.c>
    AddType application/javascript          js
    AddType application/vnd.ms-fontobject   eot
    AddType application/x-font-ttf          ttf ttc
    AddType font/opentype                   otf
    AddType application/x-font-woff         woff
    AddType image/svg+xml                   svg svgz 
    AddEncoding gzip                        svgz
</Ifmodule>

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
    AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
    AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</Ifmodule>

Вот график использования ЦП, диска и полосы пропускания за последний месяц.

Как видите, загрузка ЦП за последние пару дней выросла в 3 раза. Пришлось перезагрузить дроплет, чтобы вывести его из строя. Несколько дней назад загрузка ЦП обычно варьировалась от 0 до 5%, но сейчас она увеличилась.

Время отклика для веб-сайта также увеличилось примерно до 4 секунд. Время отклика велико даже при невысокой загрузке процессора. Все работало нормально примерно до 10 дней, и с тех пор я не вносил никаких изменений в свою конфигурацию. Прирост посещаемости не произошло, ежедневная посещаемость составляет около 1500 посетителей. Как я могу определить причину этой проблемы? Какие-либо предложения?