标签: strace

如何设置strace输出字符串宽度更长?

奇怪的是,我在任何地方都找不到它,但是当我将 strace 的输出标准输出到这样的文件中时:

strace foo.exe | & tee foo.log
Run Code Online (Sandbox Code Playgroud)

输出很短,我怎样才能使宽度更长?

strace

27
推荐指数
1
解决办法
3万
查看次数

找出高 CPU 使用率的 apache 进程实际上在做什么?

目前我们的服务器存在一些问题,间歇性地,我们似乎得到了 apache 进程,这些进程只是运行和运行,占用 100% 的 CPU。

运行 top 时,我们看到以下内容:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
20788 www-data  20   0  318m  18m 3984 R  100  0.0  40:29.21 /usr/sbin/apache2 -k start
23523 www-data  20   0  319m  20m 4684 R  100  0.0   4:12.36 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)

我想尝试找出导致这种情况的脚本(或任何脚本),所以我尝试了:

 strace -p 20788
Run Code Online (Sandbox Code Playgroud)

但这根本没有显示任何输出(我已经离开了大约 10 分钟,它什么也没显示)。根据我的理解,这可能意味着它陷入了无限循环,并且没有任何“系统调用”可以显示。

我还能做些什么来显示正在发生的事情吗?

谢谢

编辑 -忘了说,这是一个随时都有几百个用户的实时服务器!所以我真的不能随意尝试更改配置选项并重新启动 apache。

编辑 2 - 当 PHP 未配置 --enable-debug 时,来自 gdb 的回溯 (bt) 似乎并不是那么有用 - 它只显示“execute()”,但我需要知道 PHP 脚本是什么实际运行..还有其他方法吗?

#0  0x00007f6c143fb0c5 …
Run Code Online (Sandbox Code Playgroud)

linux top strace apache-2.2 ubuntu-12.04

19
推荐指数
2
解决办法
11万
查看次数

监控 Linux 机器上所有新生成的进程

有时一个过程来来去去的速度比我快ps aux,我试过,watch -d -n0.1 "ps aux | tail"但又一次,限制在 1/10 秒。我真正想要的是运行一个命令并在所有新进程产生时跟踪它们,每行一个。即使是运行速度很快的进程。我知道strace有与此类似的能力,但我无法让它做我想做的事。

tl;dr : 有没有办法记录所有新进程?

我不想知道太多,不超过一行ps aux会给我,对于目前的情况,我只有一个由另一个产生并消失的进程,我希望能够运行它,但我不知道命令是什么。即使知道新的 PID 就足够了,因为我可以想出一个脚本来获取这些并ps | grep在这些上运行并在进程运行时为我提供更多信息(假设希望进程在运行时仍然存在ps

process ps strace

13
推荐指数
1
解决办法
2万
查看次数

可以 strace 显示读/写系统调用的文件名/路径

如果在 Linux 上,我 strace 一个进程,那么读取和写入将显示文件描述符句柄号。如果我查看,/proc/$PID/fd我可以看到与 fd 编号(如果适用)对应的文件的符号链接。

无论如何让strace为我做这个查找并(通过取消引用符号链接)向我显示strace输出中的文件名?它已经查找 Linux errno 并截断和编码字符串,那么它也可以这样做吗?

更新:我知道 strace 会显示open显示路径和 fd的调用。这对于短期运行的进程来说很好。但是假设我有一个很长的运行过程(以天为单位),并且没有在 strace 下运行整个过程,只是稍后使用strace -p.

strace

12
推荐指数
1
解决办法
8844
查看次数

你会如何简化这个命令?

我对 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')
Run Code Online (Sandbox Code Playgroud)

谢谢!

bash command-line-interface strace

10
推荐指数
1
解决办法
686
查看次数

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

我有几个进程占用了大量系统 CPU 时间(通过查看 vmstat 确定)。有没有一种简单的方法可以找出正在执行的系统调用类型?

我知道有 strace,但是有没有更快更简单的方法?是否存在类似于系统调用的“顶部”之类的东西?

linux monitoring performance central-processing-unit strace

9
推荐指数
2
解决办法
1万
查看次数

“yum clean”挂起 - 接下来要尝试什么?

我运行了许多 CentOS 服务器。我最近偶尔会这样做,yum update但这在少数服务器上失败了。在大多数情况下,我已经能够通过以下方式前进:

# yum clean all
# rm -f /var/lib/rpm/__db*
# rpm --rebuilddb
# yum update
Run Code Online (Sandbox Code Playgroud)

但是在一台服务器上,yum clean命令挂起。我试过运行:

# yum -v --noplugins clean all
Run Code Online (Sandbox Code Playgroud)

但我根本没有输出。百胜只是挂起,如果我让它在那里坐几个小时,不使用任何 CPU,只是停止。正在做

# strace -f yum -v --noplugins clean all
Run Code Online (Sandbox Code Playgroud)

产生相当多的输出,但随后停止:

...
stat64("/var/lib/rpm/__db.003", {st_mode=S_IFREG|0644, st_size=450560, ...}) = 0
open("/var/lib/rpm/__db.003", O_RDWR|O_LARGEFILE) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
mmap2(NULL, 450560, PROT_READ|PROT_WRITE, MAP_SHARED, 4, 0) = 0xb6b34000
close(4)                                = 0
stat64("/var/lib/rpm/Packages", {st_mode=S_IFREG|0644, st_size=14938112, ...}) = 0
open("/var/lib/rpm/Packages", O_RDONLY|O_LARGEFILE) = 4
fcntl64(4, F_SETFD, …
Run Code Online (Sandbox Code Playgroud)

linux yum strace

8
推荐指数
2
解决办法
3万
查看次数

tail -f 未跟踪 Docker 容器中的日志文件

我看到tail -f在 CoreOS 的 Docker 容器内运行命令时出现了一些奇怪的行为。

我能想到的许多变量可能会导致问题,但我不确定首先需要做什么来排除故障。在 CoreOS 上,我正在运行支持 overlayfs 的最新版本,以及较新版本的 Docker (1.4.1)。

有趣的是,我能够在运行不同版本 Docker (1.3) 的不同主机操作系统 (Ubuntu 14.04) 上成功跟踪日志。

如果这有助于排除故障,我可以生成 strace 日志,它们似乎在主机之间存在显着差异。例如,在不工作的主机上,在 strace 输出中读入以下内容后,strace 停止:

04:03:03 inotify_add_watch(4, "f017f0a1-a1e9-11e4-90bc-027e0f87cac6-paster.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000028>
04:03:03 fstat(3, {st_mode=S_IFREG|0644, st_size=12229, ...}) = 0 <0.000022>
04:03:03 read(4, 0x7711f0, 64)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <3.101545>
Run Code Online (Sandbox Code Playgroud)

我只是对 strace 不够熟悉,无法很好地解释结果。

logging tail strace docker coreos

8
推荐指数
1
解决办法
6288
查看次数

Java进程(OpenDS)消耗所有cpu(futex flood)-如何调试futex?

今天我注意到我的 LDAP 服务器 (OpenDS) 在每个可用内核上消耗 100% 的 CPU。快速诊断显示我在 futex 锁定期间有很多 ETIMEDOUT。

我如何调试它以找出发生了什么以及如何修复它?

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, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779083, {1342114766, 310107537}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0 …
Run Code Online (Sandbox Code Playgroud)

linux debug java strace opends

6
推荐指数
1
解决办法
7555
查看次数

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
Run Code Online (Sandbox Code Playgroud)

文件描述符 #16 似乎是 mysql 套接字:

line from strace
1335       0.000328 socket(PF_LOCAL, SOCK_STREAM, 0) = 16
Run Code Online (Sandbox Code Playgroud)

和这里

pidof mysqld
15393
lsof -p 15393
mysqld  15393 mysql   12u  IPv4  26913133       0t0      TCP *:mysql (LISTEN)
Run Code Online (Sandbox Code Playgroud)

因此,Apache 似乎正在等待 mysql 执行上一行写入套接字的查询。我对吗?这是否意味着我需要了解为什么 MySQL 执行简单查询需要这么长时间?

2)很长

1335       0.000040 …
Run Code Online (Sandbox Code Playgroud)

mysql linux strace apache-2.2 file-descriptors

6
推荐指数
1
解决办法
1947
查看次数