Мой Linux-сервер "Количество созданных процессов" и "Переключатели контекста" невероятно быстро растут
У меня странное поведение на моем сервере:-/. Является ли OpenVZ VPS (я думаю, это OpenVZ, потому что /proc/user_beancounters
существует и df -h
возвращает /dev/simfs диск. Также ifconfig
возвращается venet0
). Когда я делаю cat /proc/stat
Я вижу, как каждую секунду создается около 50-100 процессов, а происходит около 800–1200 тыс. Переключений контекста! Вся эта информация находится на полностью бездействующем сервере, ни трафике, ни запущенных программах.
В верхней части отображается средняя загрузка 0 и 100% простоя процессора.
Я закрыл все ненужные сервисы (httpd, mysqld, sendmail, nagios, named...) и проблема все еще возникает. я делаю ps -ALf
каждую секунду тоже, и я не вижу никаких изменений, только новый ps
процесс создается каждый раз, а PID точно такой же, как и раньше + 1, поэтому новые процессы не создаются, поэтому я подумал, что процесс растет в cat /proc/stat
должно быть темы (да, кажется, что processes
в /proc/stat
также учитывает создание потоков: http://webcache.googleusercontent.com/search?q=cache:8NLgzKEzHQQJ:www.linuxhowtos.org/System/procstat.htm&hl=es&tbo=d&gl=es&strip=1).
Я изменился на /proc
реж и готово cat [PID]\status
со всеми PID, перечисленными с ls
(Включая ядра) и в любом процессе voluntary_ctxt_switches
ни nonvoluntary_ctxt_switches
растут с той же скоростью, что и cat /proc/stat
делает (всего несколько десятков в секунду), Threads
держит то же самое.
я сделал strace -p PID
ко всему процессу, чтобы я мог видеть, если какой-либо процесс создает потоки или что-то еще, но единственный процесс, который имеет некоторое движение ssh
и это движение read
/write
операции из-за отправки данных на мой терминал.
После этого я сделал vmstat -s
и увидел, что forks
растет с той же скоростью processes
в /proc/stat
делает. Как говорит http://linux.die.net/man/2/fork, каждый fork()
создает новый PID, но мой PID сервера не растет!
Последнее, о чем я могу думать, это то, что все обрабатываемые данные, которые proc/stat
а также vmstat -s
show используется всеми остальными VPS, хранящимися на той же машине, но я не знаю, правильно ли это... Если кто-то может пролить свет на это, я был бы очень благодарен.
2 ответа
В вашем случае я бы предположил, что ваше ядро не виртуализирует некоторые или все значения в / proc / stat, поэтому то, что вы видите, должно быть вызвано активностью в других контейнерах или на самом аппаратном узле.
Вы не упомянули конкретную версию ядра, поэтому мы не можем проверить наверняка, но аналогичная проблема обсуждалась в http://forum.openvz.org/index.php?t=msg&goto=44507&;.
PS: проверьте /proc/vz/vestat вместо этого.
Я видел по крайней мере один подобный вопрос о ком-то с двумя одинаковыми серверами Ubuntu за балансировщиком нагрузки... и я скажу вам то, что я ему сказал:
syspro ("системный профилировщик")
или попробуйте добавить некоторые ограничения в /etc/security/limits.conf. Примените ограничения к обеим машинам и сравните, какие исполняемые файлы отображаются. Это как минимум помечает процесс или поток и сужает список подозреваемых.
man limit.conf: hard & soft для файловых дескрипторов, mem заблокирован, размер стека, время процессора, хорошие уровни и т. д.