当我运行我的程序时,“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/