2010-03-25 3 views
2

Привет ребята У меня есть странный вопрос,USleep() php5 использует 40% простоя процессора

У меня есть кли PHP скрипт работает на Centos 5.x, который использует USleep (Somtimes 1сек, иногда 2с, Somtimes 100мс это зависит), если есть требуется некоторое ожидание, но то, что я заметил, что его когда-то на USleep(), кажется, используют около 40% простоя процессора:

Cpu(s): 5.3%us, 21.3%sy, 0.0%ni, 57.2%id, 0.0%wa, 0.0%hi, 0.0%si, 16.1%st 

какие-нибудь идеи?
веселит

+0

Большую часть времени тратится в режиме ядра, попробуйте strace в процессе, чтобы увидеть, какие системные вызовы он вызывает. – jpalecek

ответ

4

Для меня это не очень простая тестовая версия. Попробуйте выполнить следующие действия в вашей системе, чтобы узнать, все ли вы получаете чрезмерное процессорное время.

Script test.php:

<?php 
for ($n=0;$n<1000;$n++) 
{ 
    usleep(10); 
} 
?> 

Затем в командной строке запуска: time php test.php

Мои результаты заключаются в следующем:

[[email protected] ~]$ cat /etc/redhat-release 
CentOS release 5.2 (Final) 
[[email protected] ~]$ time php test.php 

real 0m1.020s 
user 0m0.013s 
sys  0m0.006s 

Вы можете видеть, что пользователь и SYS время очень малы по сравнению с реальным (или прошедшим) временем. то есть загрузка процессора была очень низкой.

+0

здесь вы идете мои времена = реальные: 0m4.941s, пользователь: 0m0.036s, sys: 0m0.036s. но как это все равно используется для использования ЦП? – Marcin

+1

Из ваших результатов я бы сделал вывод, что 'usleep' не ваша проблема. Можете ли вы показать нам, что еще находится в вашем коде, - я полагаю, вы находитесь в какой-то петле. –

3

В системах Windows, если вы не установите лимит времени выполнения вашего скрипта 0 (set_time_limit(0);), то PHP исполняемый файл будет есть столько, сколько 50% мощности процессора при использовании сна или USleep функции.

+1

OMG, почему? – jpalecek

+0

Я пробовал это, никакой разницы ... ура П.С. я на Linux Centos 5 .. – Marcin