我有一个在ESX4.0服务器上运行的debian。这个VM承载了许多用户,每个用户在一个屏幕实例中运行一个irssi会话。
这是相当好的工作,除了一个用户。由于某些原因,这个irssi会话一直处于100% CPU使用率的高峰(同时继续正常工作)。它没有运行任何没有加载到其他运行正常的irssi会话上的脚本。
100%的cpu不会立即启动,但通常在启动后几个小时内启动。它永远不会消失。
您将如何调试此问题的根源?我试着在上面使用strace,但是没有立即看到任何明显的东西,尽管在开始时和在它达到高峰之后,调用肯定有一个不同的模式。
首先,下面是30秒以上呼叫的直方图:
time: 334
gettimeofday: 317
poll: 122
read: 9
write: 2
restart_syscall: 1一旦CPU开始挂钩,我就会得到以下信息:
gettimeofday: 230176
read: 115122
poll: 115106
time: 531
write: 107
waitpid: 38
_llseek: 2
ioctl: 2
fstat64: 2
open: 2
close: 2
fcntl64: 2
unlink: 1连接过程的'ltrace -S‘柱状图显示为最上面的条目:
SYS_read: 61731
g_io_channel_read: 34115
SYS_gettimeofday: 24662
SYS_poll: 12344
fflush: 6828
g_main_context_iteration: 6823
__ctype_toupper_loc: 4025
g_strcasecmp: 3757
g_hash_table_lookup_extended: 3325
g_direct_hash: 3068我遗漏了什么?解决这个问题的下一步是什么?
发布于 2009-09-23 22:25:35
我认为你需要弄清楚它是什么读()和轮询()ing这么多。因为它并不是不断地打开和关闭新的文件--很明显,每30年代只有两个-- lsof应该告诉你这一点。
如果从管道读取(),如下所示:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
irssi 4993 user 5w FIFO 0,6 2941908 pipe然后对管道的所有进程和grep作为根用户运行lsof,或者在其输出中运行命名管道的名称,或者运行未命名管道的节点编号。(在这种情况下,是2941908.)这将向您展示irssi和管道另一端的任何过程。
如果管道没有另一端,…呃我不确定。也许从一开始就将其中一个过程勒紧,直到问题发生,并弄清楚管道到底是怎么回事。用'-e trace=‘标志限制输出可能是有意义的,但是我想不出一组好的东西来限制我的头顶。
https://serverfault.com/questions/68114
复制相似问题