Высокий% загрузки процессора при работе PHP как CLI - PullRequest
2 голосов
/ 17 августа 2010

Извините за неопределенный вопрос, но я только что написал некоторый php-код, который выполняется как CLI, и я почти уверен, что он плохо себя ведет.Когда я запускаю «top» в командной строке, он показывает очень мало ресурсов, выделяемых любому отдельному процессу, но между 40-98% и временем iowait (% wa).У меня обычно около 0,7% распределено между% us и% sy, а оставшиеся ресурсы уходят в бездействующие процессы (обычно где-то между 20-50%).

Этот сервер выполняет запросы MySQL легко, в 300 развремя, затрачиваемое другими серверами на выполнение того же запроса, и даже то, что кажется бесконечным для входа в систему через SSH ... поэтому, несмотря на то, что осталось некоторое время простоя процессора, кажется очевидным, что происходит что-то очень плохое.Какие бы скрипты ни выполнялись, они обновляют мою базу данных MySQL, но, похоже, она экспоненциально медленнее, чем когда они запускались.

Мне нужны некоторые идеи, чтобы служить отправной точкой для диагностики того, что происходит.

Некоторые вещи, которые я хотел бы знать:

  1. Как яможет подтвердить, сколько фактически запущенных сценариев
  2. Есть ли способ подтвердить, что эти сценарии фактически завершают работу, когда они завершаются, а не просто "зависают", занимая процессорное время и память?
  3. Какие узкие места я должен проверять, чтобы убедиться, что я не создаю слишком много экземпляров этого скрипта, чтобы это больше не повторилось.

Я понимаю, что это, вероятно, огромный вопрос, но я более чем готов перейти по любым предоставленным ссылкам и прочитать об этом ... Мне просто нужно знать, с чего начать.

Ответы [ 2 ]

4 голосов
/ 18 августа 2010

Высокий iowait означает, что пропускная способность вашего диска насыщена.Это может быть просто потому, что вы загружаете свой сервер MySQL слишком большим количеством запросов, и это приводит к тому, что диск пытается загрузить данные для их выполнения.

В качестве альтернативы, у вас может быть недостаточно физической памяти, что приводит кбольшие объемы дискового ввода-вывода для подкачки.

Чтобы начать диагностику, запустите vmstat 60 на 5 минут и проверьте вывод - в столбцах si и so показаны параметры подкачки и выгрузки, а такжеСтроки bi и bo показывают другие операции ввода-вывода.(Отредактируйте свой вопрос и вставьте вывод для получения дополнительной помощи).

0 голосов
/ 18 августа 2010

Высокий iowait может означать, что у вас медленный / дефектный диск.Попробуйте проверить это с помощью монитора дисков SMART.

http://www.linuxjournal.com/magazine/monitoring-hard-disks-smart

  1. ps auxww |grep SCRIPTNAME
  2. то же самое.
  3. Почему вы запускаете более одного экземпляра вашего скрипта для начала?
...