Apache использует 100% CPU. Может ли команда «ps» сказать мне, что она делает?

8

У меня есть сервер SLES 10 Linux, и иногда Apache доводит его до 100% CPU.

С ps axя могу видеть, что Apache породили ~ 50 Apache процессов.

Например, psкоманда может сказать мне, что делает каждый из этих процессов Apache?

Или, может быть, какой-то другой метод, чтобы я мог видеть, какие веб-страницы, которые вызывают проблему?

Sandra
источник

Ответы:

14

Мой файл /etc/httpd/conf/httpd.conf имеет этот раздел:

# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .example.com
    Allow from 127. 192.168.1.
</Location>

Таким образом, если я перехожу на http://192.168.1.1/server-status , я получаю страницу, которая говорит мне:

  1. версия сервера
  2. httpd uptime
  3. текущее использование процессора
  4. количество обрабатываемых запросов и число незанятых работников

  5. сетка того, что делает каждый процесс
  6. последние запросы

    Состояние сервера Apache для 192.168.3.1

    Версия сервера: Apache / 2.2.3 (Red Hat)
    Сервер Дата постройки: 14 июля 2009 06:04:04

    Текущее время: 17.07.2010 10:20:31
    Время перезапуска CDT : 17.07.2010 10:13:12 Создание
    родительского сервера CDT : 0 Время
    работы сервера: 7 минут 19 секунд
    Всего обращений: 51 - Всего Трафик: 156 кБ
    Использование ЦП: u0 s0 cu0 cs0
    .116 запросов / сек - 363 B / сек - 3132 B / запрос
    1 запрос в настоящее время обрабатывается, 7 незанятых рабочих

    __W _____................................................. .......
    ........................................... .....................
    ............................. ...................................
    ............... .................................................

    Клавиша табло:
    "_" Ожидание соединения, "S" Запуск, "R" Запрос на чтение,
    "W" Отправка ответа, "K" Keepalive (чтение), "D" DNS Lookup,
    "C" Закрытие соединения, "L «Лесозаготовка», G «Изящно заканчивая
    », «Очистка рабочего на холостом ходу». » Открытый слот без текущего процесса

    Srv PID Acc M CPU SS Req Conn Клиент
    дочернего слота VHost Запрос 0-0 20715 0/2/2 _ 0,00 418 0 0,0 0,01 0,01 192.168.3.97 dit GET / статус сервера HTTP / 1.1
    1-0 20716 0/49/49 _ 0,00 128 0 0,0 0,15 0,15 192,168.3,97 dit GET / статус сервера HTTP / 1.1
    2-0 20717 0/0/0 W 0,00 0 520222374 0,0 0,00 0,00 192,168.3,97 dit GET / статус сервера HTTP / 1.1

Кевин М
источник
Возможно, вам придется установить, ExtendedStatus ONчтобы увидеть каждый запрос
TonyUser
3

straceможет рассказать вам, что делает конкретный процесс на уровне системных вызовов, но он не даст вам «50-футового обзора» происходящего. Вам нужно собрать воедино системные вызовы, которые он использует, чтобы понять это.

Игнасио Васкес-Абрамс
источник
2

Если у вас есть веб-сайт с базой данных, вы можете посмотреть в СУБД, какие команды выполняются в данный момент. Может быть, это поможет вам определить, где в вашем коде сайта генерируется нагрузка.

В противном случае вы можете увеличить уровень регистрации демона httpd. Тогда у вас есть больше информации в журналах.

Рафаэль Лютигер
источник
1

Существует также ltrace, который работает как strace, но с библиотечными вызовами.


источник
0

Вы можете найти топ более информативным, чем PS.

bmargulies
источник