gettimeofday 전화가 너무 많은 이유는 무엇입니까?


11

PHP / Apache 콤보가 왜 많은 gettimeofdaysyscall을 수행합니까? 비록 모든 전화가 빠르더라도 모든 통화를 고려해야합니다.

빨리 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 전화는 저를 걱정합니다. 누구든지 이것에 대해 약간의 관심을 기울입니까?


자바는 더 나 빠진다.
Nils

당신의 프로그램은 무엇입니까?
Michael Hampton

1
"이유"에 대답 할 수는 없지만 stackoverflow.com/questions/7266813/…access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/…에 대해 알고 있습니까? syscall은 일반적으로 사용자 공간 코드 ( "vsyscall")에 매핑되므로 오버 헤드가 크게 줄어 듭니다.
the-wabbit

1
카운트는 당신을 걱정하지 않아야합니다. 설문 조사는 200 건에 불과하지만 98 % 이상을 사용합니다. 일반 strace 출력으로 전환하면 아파치가하는 일을 볼 수 있습니다 (많은 속도가 느려질 것입니다).
ott--

답변:


4

Gettimeofday는 주로 Apache에서 디버그 파일에 항목을 기록하기 위해 호출합니다. 또한 일부 모듈은 gettimeofday를 사용합니다. 따라서 걱정할 것이 없습니다.

편집 : 일부 PHP 소스 코드를 파고 다음 결과를 얻었습니다. 대부분의 관련 PHP 함수는 시스템 시간을 사용합니다. 이들이 시스템 시간을 사용하므로 gettimeofday가 많이 호출되므로 통화를 줄이려면 시간 관련 기능을 줄이십시오.

다른 함수들도 gettimeofday-calls를 만든다고 말해야한다. 예를 들어 php_session_start를 사용하면 (때로는 새 세션과 같은 몇 가지 매개 변수를 결정하는 등) php_combined_lcg를 호출하여 시드 값이 설정되어 있지 않으면 lcg_seed를 호출합니다. 의사 난수를 얻습니다. 그리고 lcg_seed는 gettimeofday 호출을합니다. 이것을 명심하십시오.


그러나 CLI PHP 스크립트 가 gettimeofday 호출을 많이 하면 어떻게됩니까? 내 PHP에 문제가 있습니까? (즉, timestamp를 매개 변수로 제공하지 않으면 date () 또는 mktime ()이 해당 함수를 사용합니까?)
Gekkie

조금 검색하고 내 답변을 편집
timmeyh

고마워 ... 나는 그 모든 전화를 가지고 살아야 할 것 같아. :)
Gekkie

xdebug설치 한 경우 부산물 일 수도 있습니다.
B00MER

1

PHP 모듈 xdebug를 활성화하면 strace가 여러 gettimeofday호출 을보고한다는 것을 알았습니다 .


1

타임 스탬프가 필요한 모든 프로세스는 gettimeofday를 호출하므로 정상인지 여부를 알기가 어렵습니다.

예를 들어, 로그를 생성하는 모듈, 시간을 확인하는 모듈 등이 될 수 있습니다. 실제로 gettimeofday가 너무 많은 이유를 알기 위해 gettimeofday를 호출 할 수있는 아파치 모듈을 비활성화하십시오. 다른 폴더에있는 수많은 로그 파일에 너무 많은 쓰기가있을 수 있습니다.

  • mod_log_debug 또는 mod_status와 같은 일반적인 용의자를 비활성화하십시오.
  • Apache의 구성 다시로드
  • strace
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.