linux - 我怎么知道为什么我的 Perl 代码在内核空间 ("sy"中花费这么多时间)?

标签 linux performance perl

当我运行我的程序时,“top”报告我在“sy”(内核空间)中花费了 30% 以上。

我如何才能获得更多相关信息?什么系统调用正在吃光所有 这次等

感谢回复者:

  • 听起来 Devel::NYTProf 很适合分析整个程序——但我在 Amazon Linux 上安装它时遇到了问题。

  • 如果我只想要系统调用的快照,strace 似乎很棒。

更新:我这样做了,花在系统调用上的时间实际上可以忽略不计。我最好的猜测是线程卡在等待某些资源上。下面的答案仍然不错,但任何建议都会有所帮助。

最佳答案

您可以使用 strace(1) - 跟踪系统调用和信号-c 标志将产生按系统调用分组的聚合结果。 -p NUM 是要附加的正在运行的进程的 PID。 监控爬虫(例如)看起来像这样:

stas@crawler2:~/ScrapMe$ strace -c -p 32184                                                                                                                                                                                              
Process 32184 attached - interrupt to quit
^CProcess 32184 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 48.00    0.000024           0       128           sendto
 26.00    0.000013           0        76           write
 26.00    0.000013           0      2652      2652 stat
  0.00    0.000000           0        24           close
  0.00    0.000000           0       226           poll
  0.00    0.000000           0        78           rt_sigaction
  0.00    0.000000           0        26           rt_sigprocmask
  0.00    0.000000           0        52           alarm
  0.00    0.000000           0        26           socket
  0.00    0.000000           0        26        26 connect
  0.00    0.000000           0        75           recvfrom
  0.00    0.000000           0        26           getsockname
  0.00    0.000000           0        26           getpeername
  0.00    0.000000           0        26           getsockopt
  0.00    0.000000           0       310           fcntl
  0.00    0.000000           0        13           epoll_wait
  0.00    0.000000           0        26           epoll_ctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000050                  3816      2678 total

关于linux - 我怎么知道为什么我的 Perl 代码在内核空间 ("sy"中花费这么多时间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369856/

相关文章:

c - Ubuntu C 程序可加载模块和 undefined symbol

performance - 如何提高 Azure ML 学习性能?

php - "Connection refused"错误在 php 中的 socket_connect

perl - 解析 Perls "$?"返回代码 : Why is it different from Hana sql error code ? ?

xml - 如何从 XML::Twig 元素获取原始 XML 代码

linux - 我的密码挑战问题

c - 访问不同 c 文件中 pthread 中的全局变量

c++ - 此应用程序无法启动,因为它无法在 "xcb"中找到或加载 Qt 平台插件 ""。并且找不到/usr/lib/qt5

performance - 如何进行快速的多维矩阵向量乘法?

performance - MD* 或 SHA-* 中是否有任何 "out of band"哈希值?