Articles of strace的

使用100%cpudebuggingirssi

我有一个在ESX4.0服务器上运行的debian虚拟机。 这个虚拟机承载了许多用户,每个用户在一个屏幕实例中运行一个irssi会话。 除了一个用户,这工作得很好。 出于某种原因,这个irssi会话在CPU使用率达到100%的时候达到峰值(同时继续正常工作)。 它没有运行任何脚本,这些脚本没有在其他更健全的irssi会话上加载。 100%的CPU不会立即启动,但通常在启动后的几个小时内。 它永远不会消失。 你将如何去debugging这个问题的来源? 我尝试了使用strace,并没有立即看到任何明显的东西,尽pipe在开始和结束之后肯定有不同的模式。 开始时,这是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 […]

Strace Apache进程输出显示24秒等待?可能是什么原因?

对两个系统调用之间执行24秒的apache儿童执行strace。我怎样才能确定是什么原因导致的这种行为。看起来像两个孩子都采取几乎相同的时间(24.7和23.92)秒。 我们正在使用php5和MySQL 5的Apache prefork / var / lib / php5 /是php会话文件夹 apache children1的strace输出与processid -20539 ps -u www-data | grep apache2 | awk'{print'-p“$ 1}'| xargs strace -o /strace/strace.log -ff -s4096 -r 20539 0.000064closures(13)= 0 20539 0.000060 open(“/ var / lib / php5 / sess_9t2cvnvdoruh666rjpm515idm0”,O_RDWR | O_CREAT,0600)= 13 20539 0.000065 flock(13,LOCK_EX)= 0 20539 24.711888 fcntl(13,F_SETFD,FD_CLOEXEC)= 0 20539 […]

Java进程(OpenDS)消耗所有cpu(futex flood) – 如何debuggingfutex?

今天我注意到我的LDAP服务器(OpenDS)在每个可用内核上都占用100%的CPU。 快速诊断表明,在futexlocking期间有很多ETIMEDOUT。 我怎样才能debugging它来弄清楚发生了什么,以及如何解决它? futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779077, {1342114766, 309244206}, ffffffff) = -1 ETIMEDOUT (Connection timed out) futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779079, {1342114766, 309528293}, ffffffff) = -1 ETIMEDOUT (Connection timed out) futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779081, {1342114766, 309812186}, ffffffff) = -1 ETIMEDOUT (Connection timed out) futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0 futex(0x7f7ecf9053a4, […]

为什么strace打开,读取512字节,然后fstat libncurses?

我有以下strace输出,我正在经历一些关于程序stream程的教程。 以下是令我困惑的部分: 16:08:02 open("/lib/libncurses.so.5", O_RDONLY) = 3 <0.000046> 16:08:02 read(3, "\x7f\"…, 512) = 512 <0.000048> 16:08:02 fstat64(3, {st_dev=makedev(202, 0), st_ino=16548, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=464, st_size=231576, st_atime=2011/02/06-15:37:43, st_mtime=2011/01/04-06:05:23, st_ctime=2011/02/06-15:37:43}) = 0 <0.000038> 通过读取前512个字节获得什么? 看起来这种模式在共享库中很常见。 更新:我刚刚得到了一个很好的答案 ,澄清了512字节的长度。 具体来自elf / dl-load.c中的注释: ELF头32位文件长52字节,64位文件长64字节。 每个节目标题条目分别是32和56个字节。 即,即使是有10个程序头文件的文件,我们也只需要分别读取372B / 624B。 除此之外,对于程序笔记还有一点空白,对于32位和64位文件分别读512B和832B就足够了。

可以strace显示我读/写syscalls的文件名/path

如果在Linux上,我跨过一个进程,那么读取和写入将显示文件描述符句柄号。 如果我查看/proc/$PID/fd我可以看到与fd编号对应的文件的符号链接(如果适用)。 有无论如何去strace做这个查找我和(通过取消引用符号链接)显示在strace输出内的文件名? 它已经查找了Linux errno的并截断&编码string,所以它也可以这样做? 更新:我知道strace将显示open调用,显示path&fd。 对于短时间运行的进程,这是很好 但假设我有一个很长的运行过程(以天测量),并没有把整个事情放在一边,只是用strace -p来连接它。

Strace民意调查,试图诊断瓶颈

我没有strace技能和knowlegde,但即时通讯尝试通过一个问题,我的客户端应用程序是非常缓慢的工作。 我试图找出瓶颈/问题可能在哪里。 所以我跑了 /etc/init.d/apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/apache2 start 并通过/tmp/trace.txt,即时通讯看到相当多的以下内容。 2540 poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052> 任何人都可以请什么即时看到,我怎么会把它绑在问题的地方。 该网站确实使用MySQL,这是否意味着连接到MySQL无法build立? 民意调查甚至与数据库有关。

strace显示很长时间从MySQL套接字读取 – MySQL需要很长时间来执行查询?

我的Apache服务器需要很长时间来处理请求。 我附上strace它可以看到下面两个延迟: 1)非常关键(143秒处理) 1335 0.000037 write(16, "\235\0\0\0\3INSERT INTO `br_anonymous_user_tokens` (`dtExpires`, `nmToken`, `dtCreated`) VALUES ('2014-08-25', '46e35dc39a41e836b806f48d21621b066ea182a9', '2014-06-25')", 161) = 161 1335 0.000111 read(16, "\t\0\0\1\0\1\374\262\n\2\0\0\0", 16384) = 13 1335 143.588134 gettimeofday({1403675497, 653337}, NULL) = 0 文件描述符#16似乎是mysql套接字: line from strace 1335 0.000328 socket(PF_LOCAL, SOCK_STREAM, 0) = 16 和这里 pidof mysqld 15393 lsof -p 15393 mysqld 15393 mysql 12u […]

在Linux中监视系统CPU /系统调用

我有几个进程正在吃掉很多系统CPU时间(通过查看vmstat)。 有没有简单的方法来找出正在进行什么样的系统调用? 我知道有strace,但有一个更快,更简单的方法? 系统调用是否存在类似“顶部”的内容?

你将如何简化这个命令?

我是strace / netstat /等新手。我使用这个命令来获取处理我的请求(telnet)的apache进程的跟踪,有没有办法简化它呢? sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \ grep $(lsof -p `pidof telnet` | grep TCP | \ perl -n -e'/localhost:(\d+)/ && print $1') | grep apache2 | \ perl -n -e'/ESTABLISHED (\d+)/ && print $1') 谢谢!

监视Linux机器上所有新产生的进程

有时候一个过程比我能更快地进行,我试着watch -d -n0.1 "ps aux | tail"但是watch -d -n0.1 "ps aux | tail"被限制在1/10秒。 我真正想要的是运行一个命令,并遵循所有新的进程,每行一个,因为他们产卵。 即使stream程运行速度很快。 我知道strace有这样的能力,但是我没有能够做到我想要的。 tl;dr :有没有办法logging所有新进程? 我不想知道多less,只是ps aux会给我的一条线,因为目前的情况下,我只是有一个由另一个产生并消失的过程,我希望能够运行它,不知道命令会是什么。 即使知道新的PID也足够了,因为我可以通过脚本来获取这些信息并运行ps | grep 在这些ps | grep和给我更多的信息,当进程正在运行(假设希望过程仍然是当ps进入)