首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用100% cpu调试irssi

使用100% cpu调试irssi
EN

Server Fault用户
提问于 2009-09-23 17:39:24
回答 1查看 772关注 0票数 4

我有一个在ESX4.0服务器上运行的debian。这个VM承载了许多用户,每个用户在一个屏幕实例中运行一个irssi会话。

这是相当好的工作,除了一个用户。由于某些原因,这个irssi会话一直处于100% CPU使用率的高峰(同时继续正常工作)。它没有运行任何没有加载到其他运行正常的irssi会话上的脚本。

100%的cpu不会立即启动,但通常在启动后几个小时内启动。它永远不会消失。

您将如何调试此问题的根源?我试着在上面使用strace,但是没有立即看到任何明显的东西,尽管在开始时和在它达到高峰之后,调用肯定有一个不同的模式。

首先,下面是30秒以上呼叫的直方图:

代码语言:javascript
复制
time: 334
gettimeofday: 317
poll: 122
read: 9
write: 2
restart_syscall: 1

一旦CPU开始挂钩,我就会得到以下信息:

代码语言:javascript
复制
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‘柱状图显示为最上面的条目:

代码语言:javascript
复制
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

我遗漏了什么?解决这个问题的下一步是什么?

EN

回答 1

Server Fault用户

发布于 2009-09-23 22:25:35

我认为你需要弄清楚它是什么读()和轮询()ing这么多。因为它并不是不断地打开和关闭新的文件--很明显,每30年代只有两个-- lsof应该告诉你这一点。

如果从管道读取(),如下所示:

代码语言:javascript
复制
COMMAND    PID       USER   FD      TYPE             DEVICE     SIZE   NODE NAME
irssi     4993       user    5w     FIFO                0,6         2941908 pipe

然后对管道的所有进程和grep作为根用户运行lsof,或者在其输出中运行命名管道的名称,或者运行未命名管道的节点编号。(在这种情况下,是2941908.)这将向您展示irssi和管道另一端的任何过程。

如果管道没有另一端,…呃我不确定。也许从一开始就将其中一个过程勒紧,直到问题发生,并弄清楚管道到底是怎么回事。用'-e trace=‘标志限制输出可能是有意义的,但是我想不出一组好的东西来限制我的头顶。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/68114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档