标签: strace

Strace 轮询,尝试诊断瓶颈

我没有 strace 技能和知识,但我试图解决我的客户端应用程序非常慢的问题。我试图找出瓶颈/问题可能在哪里。

所以我跑了

/etc/init.d/apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/apache2 start
Run Code Online (Sandbox Code Playgroud)

通过/tmp/trace.txt,我看到了很多以下内容。

2540  poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052>
Run Code Online (Sandbox Code Playgroud)

有人会取悦我所看到的,以及我将如何将其与问题所在的位置联系起来。该站点确实使用了 MySQL,这是否意味着无法建立与 MySQL 的连接?民意调查甚至与数据库相关。

strace

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

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

对其中一个 apache 子进程执行 strace,它显示两次系统调用之间的时间间隔为 24 秒。我如何确定导致此行为的原因。看起来两个子进程花费的时间几乎相同(24.7 和 23.92)秒。

我们使用 apache prefork 与 php5 和 mysql 5

/var/lib/php5/ 是 php 会话文件夹

带有 processid -20539 的 apache Children1 的 strace 输出

ps -u www-数据 | grep apache2 | awk '{print"-p " $1}' | xargs strace -o /strace/strace.log -ff -s4096 -r

20539 0.000064 关闭(13) = 0

20539 0.000060 打开(“/var/lib/php5/sess_9t2cvnvdoruh666rjpm515idm0”,O_RDWR|O_CREAT,0600)= 13

20539 0.000065 羊群(13, LOCK_EX) = 0

20539 24.711888 fcntl(13, F_SETFD, FD_CLOEXEC) = 0

20539 0.000056 fstat(13, {st_mode=S_IFREG|0600, st_size=211, ...}) = 0

20539 0.000080 …

php max-file-descriptors strace apache-2.2

4
推荐指数
1
解决办法
1815
查看次数

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

我有以下 strace 输出,我正在通过这些输出自学更多关于程序流程的知识。这是让我困惑的部分:

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

通过读取前 512 个字节获得了什么?似乎这种模式在共享库中很常见。

更新:我刚刚得到了一个很好的答案,澄清了 512 字节的长度。具体来自 elf/dl-load.c 中的评论:

ELF 标头 32 位文件的长度为 52 字节,而 64 位文件的长度为 64 字节。每个程序头条目的长度分别为 32 和 56 字节。即,即使文件有 10 个程序头条目,我们也只需要分别读取 372B/624B。为程序注释添加一点余量,分别读取 32 位和 64 位文件的 512B 和 832B 就足够了。

linux debug debian strace

4
推荐指数
1
解决办法
609
查看次数

如何在 Tomcat Catalina 上运行 strace 或 ltrace?

运行 ltrace 并非易事。这个 RHEL 5.3 系统基于 Tomcat Catalina(servlet 容器),它使用文本脚本将所有内容联系在一起。当我试图在这里找到一个可执行文件时,我陷入了困境:

/etc/init.d/pki-ca9 调用 dtomcat5-pki-ca9

#Path to the tomcat launch script (direct don't use wrapper)
TOMCAT_SCRIPT=/usr/bin/dtomcat5-pki-ca9
Run Code Online (Sandbox Code Playgroud)

/usr/bin/dtomcat5-pki-ca9 调用看门狗程序

/usr/bin/nuxwdog -f $FNAME
Run Code Online (Sandbox Code Playgroud)

我用包装器替换了 nuxwdog

[root@qantas]# cat /usr/bin/nuxwdog
#!/bin/bash
ltrace -e open -o /tmp/ltrace.$(date +%s) /usr/bin/nuxwdog.bak $@

[root@qantas]# service pki-ca9 start
Starting pki-ca9:              [  OK  ]

[root@qantas]# cat /tmp/ltrace.1295036985
+++ exited (status 1) +++
Run Code Online (Sandbox Code Playgroud)

这是丑陋的。如何在 tomcat 中运行 strace 或 ltrace?

更新

这是tomcat的“进程”

[root@qantas]# ps -ef | grep tomcat
pkiuser  21767 21766  0 10:10 ?        00:00:09 …
Run Code Online (Sandbox Code Playgroud)

tomcat rhel5 strace

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

Apache进程占用CPU过多

我有一个运行 php 的 ubuntu apache/php 服务器,每秒执行 appx 100 次点击,还有一个在后台运行的 PHP cron。

我偶尔会在其中一个 Apache 进程上获得高 CPU 负载,无论流量或 cron 活动如何,它都会保持高负载。在我看来,它陷入了某种循环或某事。

您将在下面找到顶部和跟踪信息。

如何找到错误代码的位置以及导致这种情况的原因?

top - 14:45:24 up 3 days,  3:38,  1 user,  load average: 5.10, 5.88, 5.85
Tasks: 163 total,   5 running, 158 sleeping,   0 stopped,   0 zombie
Cpu(s): 47.8%us, 18.5%sy,  0.0%ni, 10.2%id,  0.0%wa,  0.0%hi,  1.8%si, 21.6%st
Mem:   7885012k total,  3858484k used,  4026528k free,   177444k buffers
Swap:        0k total,        0k used,        0k free,  1037868k cached
  PID USER      PR  NI  VIRT  RES  SHR S …
Run Code Online (Sandbox Code Playgroud)

php pid strace apache-2.2

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

在 cifs mount strace 上调试慢速 ls 使其变得更快

我有一台安装了 cifs 共享(Azure 存储文件)的服务器。有时 ls 返回缓慢(20 秒)。经过一番调试后,我到目前为止发现:

  • ls /data/some/symlink/directory20秒内返回
  • 进入 /data/some/symlink/directory 然后执行ls .需要 0.02 秒
  • ls /data/original/location/that/symlinkpoints/to/directory也返回亚秒

ls 的 20 秒返回时间似乎受到目录中文件数量的影响。目录越大,花费的时间就越多。

这让我认为这与 ls 处理符号链接的方式有关。就像它必须为每个文件或其他东西解决它一样。

为了调试这个,我想通过 strace 运行 ls 来看看我是否可以看到不同情况之间的系统调用有什么区别。但是如果我跑

strace ls /data/some/symlink/directory it also returns sub second suddenly.
Run Code Online (Sandbox Code Playgroud)

关于为什么通过 strace 运行它会使其速度更快以及如何进一步调试有什么想法吗?

linux cifs strace

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

WSGI 无法访问文件,但权限正确

我正在调试MoinMoinCentOS 上抛出权限错误的问题,但我无法追踪有问题的文件/目录在哪里。

strace -vp <pid>在 apache pid 上运行;当我遇到问题时,我看到了这个:

epoll_wait(10, {{EPOLLIN, {u32=3487534344, u64=140367313734920}}}, 2, 10000) = 1
accept4(6, {sa_family=AF_INET6, sin6_port=htons(52621), inet_pton
    (AF_INET6, "::ffff:105.193.30.91", &sin6_addr), sin6_flowinfo=0, 
    sin6_scope_id=0}, [28], SOCK_CLOEXEC) = 11
## Later on...
read(7, 0x7fffa658ad7f, 1)              = -1 EAGAIN (Resource temporarily 
    unavailable)
Run Code Online (Sandbox Code Playgroud)

但是,由于 apache 已经在运行,因此我open()在称为7;的文件中没有看到对应的文件。因此我看到权限问题,但我仍然不知道哪个文件有问题。

我知道当我重生 apache 时我可以尝试捕获所有打开的文件,但我希望有一种方法可以将文件映射7到真实的文件名......有没有办法做到这一点?

编辑 1:

使用@lain 的指导,我跑了lsof | grep 266474069,但结果不清楚......

[root@lnxlmf moin]# ls -la /proc/9707/fd/7
lr-x------. 1 root root 64 Aug 28 …
Run Code Online (Sandbox Code Playgroud)

linux wsgi mod-wsgi strace apache-2.2

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

标签 统计

strace ×7

apache-2.2 ×3

linux ×3

php ×2

cifs ×1

debian ×1

debug ×1

max-file-descriptors ×1

mod-wsgi ×1

pid ×1

rhel5 ×1

tomcat ×1

wsgi ×1