У меня есть VPS с ОС CentOS 5.7, и ведет себя очень странно. Мой VPS расположен на 2-ядерная машина.
Для двухъядерной машины средняя загрузка, которую я вижу, очень высока, что очевидно, когда я использую top
команда для расследования:
- 04:04:40 up 1 day, 22:43, 1 user, load average: 6.23, 5.19, 4.72
Tasks: 59 total, 1 running, 58 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.4%us, 3.4%sy, 0.0%ni, 85.4%id, 5.8%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1376256k total, 755908k used, 620348k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 15 0 2172 664 572 S 0.0 0.0 0:02.59 init
1135 root 18 -4 2276 556 344 S 0.0 0.0 0:00.00 udevd
1231 root 19 0 32716 564 460 S 0.0 0.0 0:00.00 brcm_iscsiuio
1542 root 16 0 1828 580 488 S 0.0 0.0 0:03.24 syslogd
1599 named 23 0 50596 3984 2024 S 0.0 0.3 0:01.26 named
1615 root 18 0 7228 1044 644 S 0.0 0.1 0:00.00 sshd
1626 root 15 0 2848 844 676 S 0.0 0.1 0:00.00 xinetd
1638 root 18 0 3728 1316 1144 S 0.0 0.1 0:00.00 mysqld_safe
1662 mysql 15 0 252m 99m 4876 S 0.0 7.4 9:21.01 mysqld
1738 postgres 15 0 20348 3412 2900 S 0.0 0.2 0:00.26 postmaster
1740 postgres 15 0 10128 904 388 S 0.0 0.1 0:01.42 postmaster
1742 postgres 15 0 20348 984 468 S 0.0 0.1 0:05.20 postmaster
1743 postgres 18 0 11128 812 292 S 0.0 0.1 0:00.13 postmaster
1744 postgres 15 0 10308 1060 440 S 0.0 0.1 0:00.00 postmaster
1757 mailnull 15 0 9524 2328 1836 S 0.0 0.2 0:00.99 exim
1786 root 18 0 2172 720 552 S 0.0 0.1 0:02.58 dovecot
1787 root 18 0 2648 1040 832 S 0.0 0.1 0:02.04 dovecot-auth
Как вы видете, нагрузка 6 (для 2-ядерной машины), но когда все верхние процессы сложены вместе, потребление памяти и процессора минимально!
Я думал, что это проблема ожидания ввода-вывода, поэтому я использовал iostat -cx 30
Проверять:
avg-cpu: %user %nice %system %iowait %steal %idle
5.43 0.02 3.36 5.80 0.00 85.39
avg-cpu: %user %nice %system %iowait %steal %idle
3.79 0.00 0.33 2.09 0.00 93.79
avg-cpu: %user %nice %system %iowait %steal %idle
3.61 0.00 0.30 5.67 0.00 90.42
avg-cpu: %user %nice %system %iowait %steal %idle
1.91 0.00 0.22 1.04 0.00 96.83
avg-cpu: %user %nice %system %iowait %steal %idle
3.47 0.00 0.28 0.75 0.00 95.49
avg-cpu: %user %nice %system %iowait %steal %idle
3.93 0.00 0.44 2.62 0.00 93.01
Как видите, %iowait
составляет всего 5%, это означает, что мои процессы используют только 5% времени ожидания операции ввода-вывода, поэтому это показывает, что диск не занят, нет возможности, что высокая средняя загрузка вызвана процессами, ожидающими диск, да?
Наконец, чтобы еще раз подтвердить свою точку зрения, я ввожу vmstat
:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 751928 0 0 0 0 120 99 0 105 5 3 85 6 0
Как видите, запущенный процесс минимален, b
столбец равен 0, что указывает на то, что количество процессов в UNINTERRUPTIBLE_SLEEP
равно 0. Более того, bi
столбец (блоки, считываемые с блочного устройства) всего 120, не так уж и много, не так ли? В si
столбец (чтение памяти из подкачки / диска) равен 0. Наконец, под заголовком процессора wa
столбец показывает, что ЦП тратит только 6% времени на ожидание завершения ввода-вывода.
Все это исключает возможность использования операций ввода-вывода как узкого места.
Итак, можно сделать вывод, что средняя загрузка очень высока и ухудшает производительность моего веб-сайта, однако такая высокая средняя нагрузка не вызвана ни одним из следующих факторов:
Что может вызвать высокую среднюю нагрузку?
Загрузка процессора - это среднее количество процессов, готовых к запуску. Процесс, ожидающий ввода-вывода по определению, в него не добавляется.
Цифры, конечно, странные: при средней загрузке 6 я ожидал бы гораздо более высокой загрузки ЦП, чем 5-6%. Но опять же, нагрузка падает, может быть, некоторое время назад был скачок процессора? Что-нибудь особенное в рабочей нагрузке?
Установить sysstat
, научитесь им пользоваться (заметьте, это непросто) и доите для понимания ...