我的 Linux 服务器“创建的进程数”和“上下文切换”增长速度非常快

我的 Linux 服务器“创建的进程数”和“上下文切换”增长速度非常快

我的服务器出现了奇怪的行为 :-/。是 OpenVZ VPS(我认为是 OpenVZ,因为/proc/user_beancounters存在并df -h返回 /dev/simfs 驱动器。还ifconfig返回venet0)。当我这样做时cat /proc/stat,我可以看到每秒大约有 50-100 个进程被创建,并且发生了大约 800k-1200k 次上下文切换!所有这些信息都是在服务器完全空闲、没有流量也没有程序运行的情况下提供的。

顶部显示平均负载为 0,空闲 CPU 为 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(包括内核 PID),并且在任何过程中voluntary_ctxt_switches也没有nonvoluntary_ctxt_switches以相同的速度增长cat /proc/stat(仅几十/秒),Threads也保持不变。

我也对所有进程都做了strace -p PID这些,所以我可以看到是否有任何进程正在创建线程或者其他什么,但唯一有一点移动的进程是,ssh而且这种移动是read/write操作,因为数据正在发送到我的终端。

之后,我做了vmstat -s并看到它以forks同样的速度增长。processes/proc/stathttp://linux.die.net/man/2/fork说,每个都fork()创建一个新的 PID 但我的服务器 PID 没有增长!

我能想到的最后一件事是,所有过程数据proc/statvmstat -s显示的数据都与存储在同一台机器上的所有其他 VPS 共享,但我不知道这是否正确...如果有人可以对此有所启发,我将不胜感激。

答案1

就您而言,我会假设您的内核没有虚拟化 /proc/stat 中的部分或全部值,因此您看到的应该是由其他容器或硬件节点本身的活动引起的。

你没有提到具体的内核版本,所以我们无法确认,但类似的问题在http://forum.openvz.org/index.php?t=msg&goto=44507&

PS:请检查 /proc/vz/vestat。

答案2

我在这里至少看到过一个类似的问题,关于某人在负载均衡器后面有两台相同的 ubuntu 服务器...我会告诉你我告诉了他什么:

syspro(“系统分析器”)

或者尝试在 /etc/security/limits.conf 中设置一些限制,将限制应用于两台机器,并比较显示哪些可执行文件。它至少会标记一个进程或线程并缩小嫌疑人名单。

man limits.conf:文件描述符的硬限制和软限制、内存锁定、堆栈大小、CPU 时间、良好级别等

相关内容