私はstraceスキルと知識を持っていませんが、クライアントアプリケーションがひどく遅いという問題を解決しようとしています。そして、ボトルネック/問題がどこにあるのかを見つけようとしています。
だから私は走った
/etc/init.d/Apache2 stop && strace -Tf -o /tmp/trace.txt /etc/init.d/Apache2 start
そして/tmp/trace.txtを調べてみると、次のようなものがたくさんあります。
2540 poll([{fd=21, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout) <0.000052>
誰もが見ているものを喜ばせますか、そして私はそれを問題のある場所にどのように結び付けますか?サイトはMySQLを使用していますが、これはMySQLへの接続を確立できなかったことを意味しますか?世論調査もDB関連ですか。
最初に一歩戻ってください。問題が一般的にどこにあるのかを見つける前に、非常に低いレベルになっています。これを行う簡単な方法は、静的HTTPページがApacheから遅いかどうかを確認することです。そうでない場合は、DBが遅い可能性があります。次のステップは、DBクエリの所要時間を確認することです。
また、これがすべて同じシステム上にある場合は、top
、iotop
、iostat
などのシステムリソースツールを確認できます。
poll
システムコールについて:
システムコールに焦点を合わせる前に、Apacheのstraceに-c
スイッチを追加して、各システムコールのタイミングを確認しますApacheに絞り込んだ場合。たとえば、正常なHAProxyからの出力の上部は次のとおりです。
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
38.79 0.001152 0 6089 epoll_wait
poll
システムコールは、 利用可能な ファイル記述子のイベント。タイムアウトが非常に低いため、これがApacheの正常な機能であると私が最初に推測した。これが実際に問題になる場合は、各ネットワークソケットにファイル記述子が必要なため、Apacheでファイル記述子が不足している可能性があります。この点に到達したら、 ファイル記述子に関するApacheマニュアルセクション を見ることができます。しかし、DerkKによれば、「open()またはsocket()で失敗する」ということは、はるかに理にかなっています。
つまり、これは実際の問題ではない可能性が非常に高いことの詳細にすぎません。ここでも、いくつかの手順を実行します。