Сервер подвисает +

Материал из wiki.helpdesk.by

(Перенаправлено с Сервер подвисает)
Перейти к: навигация, поиск

Сервер едва жив, почти не отвечает или тормозит так, что работать невозможно.

Обычно это бывает при нехватке каких либо ресурсов.

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

(Шваяков Александр)




Содержание

CPU

Проверьте количество, параметры и мощность ваших процессоров:

cat /proc/cpuinfo

Список из 30 процессов, которые больше всего нагружают процессор:

ps aux --sort=-%cpu | head -31

В динамике увидеть список самых прожорливых процессов можно командой top

Для более подробной информации установите и используйте htop Файл:Htop.png

Память

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

free
             total       used       free     shared    buffers     cached
Mem:        962568     734924     227644          0      29040     251592
-/+ buffers/cache:     454292     508276
Swap:      1461872     326604    1135268

Примечание: Для виртуальных серверов VPS/VRS распределение (выделение) памяти выполняется ядром несущей машины (hardware node-HN).

Виртуальная память (swap) для Вашей VPS выделяется, но Вы этого не видите стандартными средствами.

Использование виртуальной памяти (swap) не отображается внутрь VPS в текущей версии Virtuozzo (В будущем это будет возможно). Для VPS выделяется просто память, и внутри VPS не показывается различие между swap и остальной памятью, поэтому в /proc/meminfo (а также в top/free) мы наблюдаем нулевой размер и нулевое использование swap. Подробнее смотрите в статье Как подключить виртуальную память (swap) на VPS


Топ прожорливых к памяти процессов

ps aux --sort=-rssize | head -20

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

ps aux --sort=-vsz | head -20

Дополнительно используйте top, htop с сортировкой по памяти


Диск

Пространство

Система может просто висеть по причине переполненного диска. Проверьте сколько места у вас имеется:

df -H
Filesystem             Size   Used  Avail Use% Mounted on
/dev/simfs             217G   149G    69G  69% /

При недостатке индексных дискрипоторов тоже будут проблемы:

df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/simfs              4.8M    1.7M    3.2M   35% /

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

Чаще всего пожирателем пространства бывают системные журналы, уделите время настройке ротации журналов.

А эта команда покажет кто съел пространство (для всего диска используем для указания каталога "/"):

du <имя каталога>| sort -rn | head -n 20

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

Чтобы узнать размер всех директорий в заданном каталоге, выполните команду:

find <путь к каталогу> -maxdepth 1 -type d -print | xargs du -sk | sort -rn 

Для поиска больших файлов можно использовать find

find <путь к каталогу> -type f -size +100M

эта команда выдаст список файлов с размером более 100М

Команду можно развить до конструкции, выполняющей действия над найденными файлами:

find <путь к каталогу>  <опции поиска> <команда> {} \;

На место симвовлов "{}" будут подставлены имена найденных файлов.

Подобная конструкция может вам скомрессировать или удалить ненужные файлы.

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


I/O нагрузка

Ваша система может сильно тормозить если постоянно находится в ожидании ввода/вывода данных. Это происходит при большой нагрузке (утилизации) устройств хранения, каналов связи и т.п. Команда iostat выдает статистику использования процессора, а также статистику ввода/вывода для устройств, разделов и сетевых файловых систем (NFS). В таком варианте она выдает парамтеры с интервалом 5 секунд

iostat -x 5
Linux 2.6.18-028stab053 (vt.helpdesk.by)        10/29/09
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          13.52    1.55    3.75   33.44    0.00   47.74
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

Примечание: - на VPS нагрузка на диск не отображается в версии ядра 2.6.18

На физическом сервере это выглядит так:

iostat -x 5
Linux 2.6.30-gentoo-r6 (k-pex)  29.10.2009      _x86_64_        (1 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          19.86   17.72    6.46    3.69    0.00   52.28
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               2.56    18.96    8.75    3.30   272.31   178.44    37.41     0.42   34.94   3.62   4.37
sdb               0.21    36.96    2.90    2.29   354.28   265.58   119.26     0.67  128.36   5.60   2.91

Сеть

Проблемы производительности связанные с сетью могут быть вызваны неверными настройками, например так могут влиять неправильные параметры в файлах:

/etc/hosts 
/etc/resolv.conf
/etc/nsswitch.conf
Проверьте проверьте правильность назначения имени хоста
domainname -f

Вы должны получить имя подобное этому

server1.domain.com
Для проверки работы DNS

Проверка прямого разрешения имени хоста:

host helpdesk.by
helpdesk.by has address 87.118.96.217

Проверка обратного разрешения имени хоста:

host 87.118.96.217
217.96.118.87.in-addr.arpa domain name pointer helpdesk.by.
Проверить канал до сервера командами
ping -c 4  87.118.96.217
traceroute -n 87.118.96.217

Если трассировка не прошла, значит вероятны проблемы с Интернет у провайдера или в магистральном канале. Примечание: - трассировка может не проходить при ограничениях на фаерволах.


Интерфейс

Поверьте ваши интерфейсы утилитой ifconfig. Утилита ethtool (доступно только для физических серверов) покажет важные параметры. Обратите внимание на параметры "Speed" и "Duplex".

ethtool eth0
Settings for eth0:
       Supported ports: [ MII ]
       Supported link modes:   10baseT/Half 10baseT/Full
                               100baseT/Half 100baseT/Full
                               1000baseT/Full
       Supports auto-negotiation: Yes
       Advertised link modes:  10baseT/Half 10baseT/Full
                               100baseT/Half 100baseT/Full
       Advertised auto-negotiation: Yes
       Speed: 100Mb/s
       Duplex: Full
       Port: MII
       PHYAD: 1
       Transceiver: external
       Auto-negotiation: on
       Supports Wake-on: g
       Wake-on: d
       Link detected: yes
Трафик

Оцените трафик на ваших интерфейсах утилитой iftop:

iftop -i venet0

Файл:Iftop1.png

iftop показывает список самых активных клиентов, но можно измерить и активность отдельного адреса используя фильтры:

iftop -F 212.34.45.56/32 -i venet0
Службы, порты и соединения ===

Какие службы работают на вашем сервере, какие порты они слушают и на каких адресах?

ss -ln

и еще так:

netstat -lnutp
Атаки

Может быть кто атакует ваш сервер? Сколько соединений создано к вашему серверу?

netstat -ntu | wc -l

Посмотрим список самых агрессивных клиентов:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Смотрите статью DOS и DDOS - простая защита

Другие популярные средства стевого мониторинга

iptraf – сетевая статистика в режиме реального времени Команда iptraf запускает цветной интерактивный монитор, следящий за сетевыми IP. Этот монитор сетевых IP базируется на команде ncurses, которая выдает различную сетевую статистику, в том числе информацию о TCP, ведет подсчет UDP, выдает сведения о ICMP и OSPF, информацию о нагрузке на Ethernet, статистику по узлам сети, данные об ошибках контрольных сумм пакетов IP и многое другое. Монитор предоставляет в удобном для чтения виде следующие данные:

  • Статистику сетевого трафика по TCP подключениям
  • Статистику IP трафика по сетевым интерфейсам
  • Статистику сетевого трафика по протоколам
  • Статистику сетевого трафика по портам TCP/UDP и по размерам пакетов
  • Статистику сетевого трафика по адресам протоколов второго уровня

tcpdump – детальный анализ сетевого трафика Команда tcpdump – простая команда, выдающая дамп сетевого трафика. Однако, вам нужно хорошо понимать протоколы TCP/IP для того, чтобы использовать это средство. Например, для того, чтобы показать информацию о трафике DNS, введите следующее:

 tcpdump -i eth1 'udp port 53'

Для того, чтобы показать все IPv4 HTTP пакеты, идущие на порт и с порта 80, т.е. выдать только те пакеты, которые содержат данные, и, например, не учитывать пакеты SYN и FIN и пакеты ACK-only, введите следующее:

 tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Для того, чтобы показать все сессии FTP для адреса 202.54.1.5, введите следующее:

 tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'

Для того, чтобы показать все сессии HTTP для адреса 192.168.1.5, введите следующее:

 tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'

Введите следующую команду и используйте для просмотра подробностей программу анализа wireshark:

 tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80



Лимиты VPS/VRS

Это касается только виртуальных серверов VPS/VRS.

Для них всегда применяются ограничения на некоторые ресурсы.

Попытки превышения отбрасываются системой.

Проверим наличие фактов такого превышения:

cat /proc/user_beancounters
Version: 2.5
      uid  resource           held    maxheld    barrier      limit    failcnt
     101:  kmemsize       15994821  285801622 2147483647 2147483647          0
           lockedpages           3         20        256        256          0
           privvmpages      250866    1132076 2147483647 2147483647          0
           shmpages          13716     287252     409600     409600         40
           dummy                 0          0          0          0          0
           numproc             137        512        512        512          5
           physpages        139881     586822          0 2147483647          0
           vmguarpages           0          0      33792 2147483647          0
           oomguarpages     139881     648683      26112 2147483647          0
           numtcpsock           70       1421      10240      10240          0
           numflock             10        269        400        400      63109
           numpty                2          6         16         16          0
           numsiginfo            0        253        256        256          0
           tcpsndbuf       3646960    8884480   51200000   51200000          0
           tcprcvbuf       1146880    6711368   51200000   51200000          0
           othersockbuf     127376    1236168    2096080    4097152          0
           dgramrcvbuf           0     258856   10485760   10485760          0
           numothersock         78        360        360        360      15076
           dcachesize       778086    1590456    3409920    3624960          0
           numfile            5912      10748      65536      65536          0
           dummy                 0          0          0          0          0
           dummy                 0          0          0          0          0
           dummy                 0          0          0          0          0
           numiptent            76         76        128        128          0

failcnt колонка указывает число неудачных попыток получить какой-то ресурс. Если эти числовые данные увеличиваются после запуска приложений, тогда соответствующий предел ресурса имеет меньший эффект, чем тот, который необходим приложению. Этот счетчик обнуляется только если перезапускается служба виртуализации. Перезапуск VPS не сбрасывает счетчик.

held колонка показывает текущее использование ресурсов.

maxheld колонка – максимальную величину потребления ресурса для последнего периода, в который проводился подсчет.

limit - предел, который не может быть превышен ни при каких обстоятельствах. barrier предел может быть превышен до limit предела, но по истечению заданного небольшого периода.

Для расшифровки параметров смотрите статью - Расшифровка user beancounters

Параметры заданы с учетом разумных обстоятеств для каждого тарифного плана, но в некоторых случаях, требующих обоснования, служба технической поддержки может допустить изменения некоторых лимитов. Это не касается лимитов на память и дисковое пространство - они заданы жестко тарифным планом. Для изменения этих лимитов Вы должны запросить изменение тарифного плана.


Ссылки

Личные инструменты
Инструменты