Neden bu kadar çok gettimeofday çağrısı?


11

PHP / Apache kombinasyonu neden bu kadar çok gettimeofdaysistem çağrısı yapıyor? Hızlı olmalarına rağmen, her çağrı dikkate alınması gereken bir çağrıdır.

Sadece hızlıca strace -c -p [apache2 process id], aşağıdakileri verir:

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

Bu 20K çağrıları beni endişelendiriyor. Buna ışık tutmak isteyen var mı?


Java daha da kötü ...
Nils

Programınız ne yapıyor?
Michael Hampton

1
"Neden" yanıtı veremiyorum ancak stackoverflow.com/questions/7266813/… ve access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/… 'in farkında mısınız ? Sistem çağrısı tipik olarak kullanıcı alan koduyla ("vsyscall") eşlenir, böylece ek yük önemli ölçüde azalır.
the-wabbit

1
Sayı seni endişelendirmemeli. Anketin sadece 200 çağrısı var, ancak zamanın% 98'inden fazlasını kullanıyor. Normal strace çıkışına geçebilirsiniz, o zaman apache'nin ne yaptığını görürsünüz (bunu çok yavaşlatır).
ott--

Yanıtlar:


4

Gettimeofday çoğunlukla Apache tarafından hata ayıklama dosyalarındaki girişleri kaydetmek için çağrılır. Ayrıca bazı modüller gettimeofday kullanır. Yani endişelenecek bir şey yok.

EDIT: Bazı php kaynak kodu kazma yaptı ve aşağıdaki sonuçları ile geldi: Çoğu zaman ilgili php işlevleri sistem saatini kullanır. Sistem saatini kullandıkları için gettimeofday çok çağrılacaktır, bu nedenle çağrıları azaltmak istiyorsanız, zamana bağlı işlevlerinizi azaltın.

Diğer işlevlerin de gettimeofday çağrıları yaptığını belirtmek zorundayım. Örneğin, php_session_start kullanırsanız, (bazen, yeni bir oturum gibi birkaç parametreye bağlı olarak), php_combined_lcg çağrısını yapar ve bu da ayarlanmış bir tohum değeri yoksa lcg_seed çağrısını yapar sahte rasgele bir sayı al. Ve lcg_seed gettimeofday çağrısı yapar. Bunu aklında tut.


Ama ne CLI php betiğim de gettimeofday çağrıları çok yaparsa ? benim php yanlış bir şey var mı? (yani tarih () veya mktime () bir parametre olarak zaman damgası sağlamazsam bu işlevleri kullanıyor mu?)
Gekkie

Biraz
aradı

Teşekkürler ... Sanırım tüm bu çağrılarla yaşamak zorundayım. :)
Gekkie

Eğer varsa xdebugyüklü, o da bunun bir yan ürünü olabilir.
B00MER

1

Ben php modülü, xdebug, etkin olması strace birkaç gettimeofdayçağrı rapor neden olduğunu keşfettim .


1

Zaman damgası gerektiren her işlem gettimeofday öğesini çağırır, bu yüzden normal olup olmadığını bilmek zordur.

Örneğin, bir günlük oluşturan bir modül olabilir, zamanı kontrol eden bir modül olabilir. Farklı klasörlerde bulunan çok sayıda günlük dosyasına çok fazla yazma olabilir.

  • Mod_log_debug veya mod_status gibi olağan şüphelileri devre dışı bırak
  • Apache yapılandırmasını yeniden yükle
  • strace
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.