Tại sao rất nhiều cuộc gọi gettimeofday?


11

Tại sao tổ hợp PHP / Apache lại làm nhiều tòa nhà như vậy gettimeofday? Mặc dù cuộc gọi nhanh chóng, mỗi cuộc gọi là một cuộc gọi cần được tính đến.

Chỉ cần nhanh chóng strace -c -p [apache2 process id], đưa ra những điều sau đây:

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

Những cuộc gọi 20K đó làm tôi lo lắng. Bất cứ ai quan tâm để làm sáng tỏ về điều này?


Java thậm chí còn tệ hơn ...
Nils

Chương trình của bạn đang làm gì?
Michael Hampton

1
Tôi không thể trả lời "tại sao" nhưng bạn có biết về stackoverflow.com/questions/7266813/ trênaccess.redhat.com/ledgeledge/docs/en-US/Red_Hat_ Entryprise_MRG / lau ? Tòa nhà thường được ánh xạ tới mã không gian của người dùng ("vs chọc trời") nên chi phí sẽ giảm đáng kể.
the-wợi

1
Số lượng không nên lo lắng cho bạn. Thăm dò ý kiến ​​chỉ có 200 cuộc gọi, nhưng nó sử dụng hơn 98% thời gian. Bạn có thể chuyển sang đầu ra strace bình thường, sau đó bạn sẽ thấy apache đang làm gì (sẽ làm chậm nó rất nhiều).
ott--

Câu trả lời:


4

Gettimeofday chủ yếu được gọi bởi Apache để ghi nhật ký các mục trong tệp gỡ lỗi. Ngoài ra một số mô-đun sử dụng gettimeofday. Vì vậy, không có gì phải lo lắng.

EDIT: Tôi đã thực hiện một số hoạt động đào mã nguồn php và đưa ra các kết quả sau: Hầu hết các hàm php liên quan đến thời gian sẽ sử dụng thời gian hệ thống. Vì họ sử dụng thời gian hệ thống, gettimeofday sẽ được gọi rất nhiều vì vậy nếu bạn muốn thực hiện lại các cuộc gọi, hãy rút lại các chức năng liên quan đến thời gian của bạn.

Tôi phải nhận xét mặc dù các chức năng khác cũng thực hiện các cuộc gọi gettimeofday. Ví dụ: nếu bạn sử dụng php_session_start, điều này sẽ (đôi khi, phụ thuộc vào một vài tham số như nếu một phiên mới, ...) thực hiện cuộc gọi tới php_combined_lcg, trong đó lần lượt gọi đến lcg_seed nếu không có giá trị hạt giống nào được đặt thành lấy số ngẫu nhiên giả. Và lcg_seed sẽ thực hiện cuộc gọi gettimeofday. Giữ nó trong tâm trí.


Nhưng điều gì sẽ xảy ra nếu tập lệnh php CLI của tôi cũng thực hiện rất nhiều cuộc gọi gettimeofday? Có gì đó không ổn với php của tôi? (tức là ngày () hoặc mktime () sử dụng các hàm đó nếu tôi không cung cấp dấu thời gian dưới dạng tham số?)
Gekkie

Tìm kiếm một chút và chỉnh sửa câu trả lời của tôi
timmeyh

Cảm ơn ... tôi đoán tôi phải sống với tất cả những cuộc gọi đó. :)
Gekkie

Nếu bạn đã xdebugcài đặt, nó cũng có thể là sản phẩm phụ của nó.
B00mer 17/2/2015

1

Tôi đã phát hiện ra rằng việc có mô-đun php, xdebug, đã kích hoạt khiến strace báo cáo một số gettimeofdaycuộc gọi.


1

Mọi quy trình yêu cầu dấu thời gian gọi là gettimeofday, vì vậy rất khó để biết liệu nó có bình thường hay không.

Ví dụ: Nó có thể là một mô-đun tạo nhật ký, mô-đun kiểm tra thời gian ... Trong thực tế, trong trường hợp của bạn, để biết tại sao có quá nhiều gettimeofday, hãy vô hiệu hóa các mô-đun apache có thể chịu trách nhiệm gọi gettimeofday. Có thể có quá nhiều ghi vào nhiều tệp nhật ký nằm trong các thư mục khác nhau.

  • Vô hiệu hóa các nghi phạm thông thường như mod_log_debug hoặc mod_status
  • Tải lại cấu hình của Apache
  • bước đi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.