なぜこんなに多くのgettimeofday呼び出しがありますか?


11

PHP / Apacheコンボが多くのgettimeofdayシステムコールを行うのはなぜですか?たとえすべてのコールが迅速であるとしても、説明する必要があるコールです。

簡単strace -c -p [apache2 process id]に、次のことができます。

Process 22294 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.52    0.010000          51       196           poll
  1.48    0.000150           0     20752           gettimeofday
  0.00    0.000000           0        94         7 read
  0.00    0.000000           0        48           write
  0.00    0.000000           0        96        32 open
  0.00    0.000000           0        75           close
  0.00    0.000000           0         6           chdir
  0.00    0.000000           0       766           time
  0.00    0.000000           0         2           chmod
  0.00    0.000000           0        56        10 access

それらの20Kコールは私を心配させます。誰かがこれに光を当てたいですか?


Javaはさらに悪い
Nils

あなたのプログラムは何をしていますか?
マイケルハンプトン

1
「理由」に答えることはできませんが、stackoverflow.com / questions / 7266813 / access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG / ...を知っていますか?通常、syscallはユーザー空間コード(「vsyscall」)にマップされるため、オーバーヘッドが大幅に削減されます。
the-wabbit

1
カウントは心配する必要はありません。世論調査には200件の電話しかありませんが、98%以上の時間を使用します。通常のstrace出力に切り替えると、Apacheが何をしているのかがわかります(速度が遅くなります)。
ott--

回答:


4

Gettimeofdayは、デバッグファイルのエントリを記録するためにApacheによって主に呼び出されます。また、いくつかのモジュールはgettimeofdayを使用します。心配する必要はありません。

編集:私はいくつかのPHPソースコードの掘り下げを行い、次の結果を思いつきました:ほとんどの時間関連のPHP関数はシステム時間を使用します。システム時間を使用するため、gettimeofdayが頻繁に呼び出されるため、呼び出しを減らしたい場合は、時間関連の関数を減らします。

ただし、他の関数もgettimeofday-callsを作成することに注意する必要があります。たとえば、php_session_startを使用する場合、これは(場合によっては、新しいセッションのようにいくつかのパラメーターに依存します...)php_combined_lcgを呼び出します。これは、シード値が設定されていない場合、擬似乱数を取得します。そして、lcg_seedはgettimeofday呼び出しを行います。これを覚えておいてください。


しかし、CLIのphpスクリプトが多くのgettimeofday呼び出しも行うとどうなりますか?私のPHPに何か問題がありますか?(すなわち、タイムスタンプを
パラメーター

少し検索し、私の答えを編集
-timmeyh

おかげで...私はすべてのそれらの呼び出しで生きる必要があると思います。:)
ゲッキー

xdebugインストールしている場合は、その副産物でもある可能性があります。
B00MER

1

phpモジュールxdebugを有効にすると、straceがいくつかのgettimeofday呼び出しを報告することがわかりました。


1

タイムスタンプを必要とするすべてのプロセスはgettimeofdayを呼び出すため、それが正常かどうかを知ることは困難です。

たとえば、ログを作成するモジュール、時間をチェックするモジュールなどです。実際、gettimeofdayが非常に多い理由を知るために、gettimeofdayの呼び出しを担当する可能性のあるapacheモジュールを無効にします。別のフォルダにある多数のログファイルへの書き込みが多すぎる可能性があります。

  • mod_log_debugやmod_statusなどの通常の容疑者を無効にします
  • Apacheの構成をリロードする
  • 痕跡
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.