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

Необъяснимое замедление работы сервера

Приносим извинения за нечеткое название темы, резюмируя следующее, оказалось, что это немного сложно, в конце концов, это, как названо, необъяснимо. В общем, хватит отговорок ...

Сегодня утром я обнаружил, что мой веб-сайт работает очень медленно, теперь этого обычно не происходит, поэтому я, очевидно, пытаюсь отследить причину проблемы. Зная, что я ничего не устанавливал и не менял в последнее время, первым делом я должен был проверить статистику использования ресурсов, она не показывает ничего необычного:

load average: 0.35, 0.34, 0.36

Проверка этого параметра в течение примерно получаса (в течение которого пользователи сообщали о сбоях) никогда не показывает ничего выше 1. Так что это не «традиционная нагрузка». Поэтому я ищу другие возможные причины.

Top также не показывает ничего необычного:

top - 08:34:34 up  1:33,  1 user,  load average: 0.30, 0.36, 0.35               
Tasks: 146 total,   1 running, 145 sleeping,   0 stopped,   0 zombie            
Cpu0  :  6.6%us,  1.3%sy,  0.0%ni, 91.1%id,  0.7%wa,  0.0%hi,  0.3%si,  0.0%st  
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni, 99.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu2  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu3  :  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Mem:   4016884k total,  1367624k used,  2649260k free,     5324k buffers        
Swap:  3919840k total,        0k used,  3919840k free,   769024k cached         

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 2593 apache    15   0  446m  66m  40m S  7.6  1.7   1:13.64 httpd              
 2450 mysql     15   0  257m  48m 5976 S  0.3  1.2   4:20.51 mysqld             
 9734 root      15   0 12740 1296  932 R  0.3  0.0   0:00.24 top                
    1 root      18   0 10348  752  628 S  0.0  0.0   0:04.91 init               
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0        
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0         
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/1      

Итак, я начал смотреть на сеть, следующую команду (которую я взял из вопроса SF о DDOS-атаках):

netstat -n | grep: 80 | cut -c 45- | cut -f 1 -d ':' | sort | uniq -c | sort -nr | more

Дает:

534
  5     1.1.1.1
  4     2.2.2.2
  4     3.3.3.3
  3     4.4.4.4
  2     5.5.5.5
  2     6.6.6.6
  2     7.7.7.7
  1     8.8.8.8
  1     9.9.9.9
  1     10.10.10.10
  1     11.11.11.11

IP-адрес удален

В этом нет ничего необычного, хотя я не уверен, что означает этот 534. Для хорошей меры я также перезагрузил сервер (в силу привычки после столь долгого использования Windows;)), но это не имело никакого значения.

Так что теперь я в растерянности, я не могу объяснить, что здесь происходит, и это, конечно, означает, что я не могу это исправить.

Сведения о сервере Это выделенный сервер со следующими характеристиками:

Страницы PHP этого сервера сайта (только vbulletin) через Apache с серверной частью MySQL, я также использую APC в качестве кешера кода операции.

РЕДАКТИРОВАТЬ - Подробнее Может быть, а может и нет ...

Используя Firebug в Firefox, я смотрел время загрузки страниц. Кажется, что происходит то, что один случайный ресурс (иногда изображение, файл JS или файл CSS) требует чрезмерного количества времени для завершения приема. Запрос выполняется за несколько миллисекунд, но получение иногда занимает до минуты. Однако это случайный ресурс, каждый запрос, который я делаю, имеет другой ресурс, на возврат которого требуется много времени. У меня нет кеширования и т.п. для этих ресурсов, они обычно обслуживаются через apache из файловой системы.

РЕДАКТИРОВАТЬ Вывод из iostat:

Linux 2.6.18-164.11.1.el5 12/10/2010      

avg-cpu:  %user   %nice %system %iowait  %steal   %idle                         
           4.66    0.00    2.08    0.84    0.00   92.42                         

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn          
sda              12.48        78.48       144.52    1008089    1856500          
sda1              0.43         2.52         6.95      32354      89224          
sda2              0.01         0.11         0.00       1356          0          
sda4              0.00         0.00         0.00         10          0          
sda5              0.48         5.33         1.61      68413      20706          
sda6             11.57        70.51       135.97     905732    1746570          
sdb              12.43        78.57       144.52    1009340    1856500          
sdb1              0.43         2.24         6.95      28768      89224          
sdb2              0.00         0.08         0.00       1068          0          
sdb4              0.00         0.00         0.00         10          0          
sdb5              0.45         5.35         1.61      68729      20706          
sdb6             11.53        70.88       135.97     910533    1746570          
md1               0.91         4.72         5.96      60666      76520          
md6              14.70       141.37       126.26    1815945    1621898          
md5               0.57        10.65         1.05     136822      13474  

РЕДАКТИРОВАТЬ

Было бы полезно, если бы я дал вам URL-адрес сайта:

http: //www.therev [УДАЛЕНИЕ] counter.com

Что ж, если проблема возникает со статическими файлами, это хорошо, потому что, по крайней мере, вы знаете, что нужно начать смотреть на Apache. Вы, вероятно, захотите использовать инструменты отладки и профилирования, чтобы увидеть, что именно не так. Предполагая, что вы говорите о системе Linux, strace вероятно, инструмент, который вам нужен. С -f и -c options, он будет следить за всеми дочерними процессами и суммировать время, затраченное на каждый системный вызов. Надеюсь, это поможет вам разобраться в проблеме.

Остановите Apache, затем перезапустите его через strace:

strace -cf /usr/sbin/httpd

(у strace есть -p возможность отслеживать pid существующего процесса, но даже с -f он не отслеживает дочерние процессы, которые были разветвлены до вызова strace.)

Дайте ему поработать некоторое время, постучите по сайту, пока он работает, пока вы не сможете запустить замедление несколько раз, а затем прервите его. Анализируйте результаты.

Если выясняется, что проблема заключается в коде приложения пользовательского режима, а не в том, что делает система, существует сопутствующая программа под названием ltrace которые можно использовать для суммирования времени, потраченного на различные вызовы общей библиотеки.

Это, вероятно, само собой разумеется, но также проверьте журналы сервера, системы и ядра, чтобы убедиться, что вы не видите никаких неожиданных сбоев или аппаратных событий.

Какие меры вы предприняли, чтобы исключить проблему на стороне клиента? Минимальная нагрузка на сервер и периодическая задержка случайных запросов ресурсов заставили бы меня исключить сканер файлов в реальном времени как виновника. Это может быть далеко, но исключение должно быть тривиальным.