5

プログラムを実行すると、"top" で、"sy" (カーネル スペース) で 30% 以上を消費していると報告されます。

これに関する詳細情報を入手するにはどうすればよいですか? 今回はどのシステムコールが食い尽くしているのかなど。

レスポンダーに感謝:

  • Devel::NYTProf はプログラム全体のプロファイリングに適しているようですが、Amazon Linux にインストールするのに苦労しました。

  • システム コールのスナップショットだけが必要な場合は、strace が優れているようです。

更新: 私はこれを行いましたが、システム コールに費やされた時間は実際にはごくわずかです。私の最善の推測は、スレッドが何らかのリソースで待機しているということです。以下でも答えはまだ良いですが、アドバイスがあれば助かります。

4

2 に答える 2

10

を使用できますstrace(1) - trace system calls and signals-cflag は、syscall によってグループ化された集計結果を生成します。-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
于 2012-11-14T01:49:42.277 に答える
5

その場合は、スクリプトのプロファイルを作成する必要があると思います。この場合、 Devel::NYTProfモジュールを使用することを強くお勧めします。

実行するのは非常に簡単で (これよりも簡単なことは何ですか?)、プロファイラーの作業の結果は、このパッケージに含まれるユーティリティを使用するか、より「グラフィカルな」ツールKCachegrindperl -d:NYTProf yourscript.plを使用して、本格的なレポートに簡単に変換できます。 .

于 2012-11-13T22:25:13.487 に答える