Mengapa begitu banyak panggilan siang hari?


11

Mengapa kombo PHP / Apache melakukan begitu banyak gettimeofdaysyscalls? Meskipun mereka cepat setiap panggilan adalah panggilan yang harus diperhitungkan.

Cepat strace -c -p [apache2 process id], berikan yang berikut:

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

Panggilan 20 ribu itu membuatku khawatir. Adakah yang mau menjelaskan ini?


Jawa bahkan lebih buruk ...
Nils

Apa yang sedang dilakukan program Anda?
Michael Hampton

1
Saya tidak dapat menjawab "mengapa" tetapi apakah Anda mengetahui tentang stackoverflow.com/questions/7266813/… dan access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/… ? Syscall biasanya akan dipetakan ke kode ruang pengguna ("vsyscall") sehingga overhead akan berkurang secara signifikan.
the-wabbit

1
Hitungannya seharusnya tidak membuatmu khawatir. Poll hanya memiliki 200 panggilan, tetapi menggunakan lebih dari 98% dari waktu. Anda dapat beralih ke output strace normal, maka Anda akan melihat apa yang dilakukan apache (akan memperlambatnya banyak).
ott--

Jawaban:


4

Gettimeofday sebagian besar dipanggil oleh Apache untuk mencatat entri dalam file-debug. Juga beberapa modul menggunakan gettimeofday. Jadi tidak ada yang perlu dikhawatirkan.

EDIT: Saya melakukan beberapa penggalian kode sumber php dan menghasilkan hasil sebagai berikut: Sebagian besar fungsi php terkait waktu akan menggunakan waktu sistem. Karena mereka menggunakan waktu sistem, gettimeofday akan banyak dipanggil jadi jika Anda ingin mengurangi panggilan, kurangi fungsi terkait waktu Anda.

Saya harus berkomentar bahwa fungsi lain juga membuat gettimeofday-calls. Sebagai contoh jika Anda menggunakan php_session_start, ini akan (kadang-kadang, bergantung pada beberapa parameter seperti jika sesi baru, ...) melakukan panggilan ke php_combined_lcg yang pada gilirannya akan membuat panggilan ke lcg_seed jika tidak ada nilai seed diset ke dapatkan nomor acak semu. Dan lcg_seed akan melakukan panggilan gettimeofday. Ingatlah ini.


Tapi bagaimana jika php script CLI saya juga melakukan banyak panggilan gettimeofday? apakah ada yang salah dengan php saya? (Yaitu date () atau mktime () menggunakan fungsi-fungsi itu jika saya tidak memberikan cap waktu sebagai param?)
Gekkie

Mencari sedikit dan mengedit jawaban saya
timmeyh

Terima kasih ... Saya rasa saya hanya harus hidup dengan semua panggilan itu. :)
Gekkie

Jika sudah xdebugdiinstal, itu juga bisa menjadi produk sampingannya.
B00MER

1

Saya telah menemukan bahwa mengaktifkan modul php, xdebug, menyebabkan strace melaporkan beberapa gettimeofdaypanggilan.


1

Setiap proses yang membutuhkan cap waktu panggilan gettimeofday, sehingga sulit untuk mengetahui apakah itu normal atau tidak.

Sebagai contoh, Ini bisa berupa modul yang membuat log, modul yang memeriksa waktu ... Bahkan, dalam kasus Anda, untuk mengetahui mengapa ada begitu banyak gettimeofday, nonaktifkan modul apache yang dapat bertanggung jawab untuk memanggil gettimeofday. Mungkin ada terlalu banyak menulis ke banyak file log yang terletak di folder yang berbeda.

  • Nonaktifkan tersangka biasa seperti mod_log_debug atau mod_status
  • Muat ulang konfigurasi Apache
  • strace
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.