Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Apache на одном ядре - как сделать?  (Прочитано 733 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Metal Messiah

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Apache на одном ядре - как сделать?
« : 18 Октября 2016, 02:58:05 »
Доброго времени суток.

На сервере 4 ядра, на одном через taskset запущен важный realtime процесс, на 2 nginx+mysql, на 3-4 apache2. В кроне висит скрипт, который периодически напоминает (через pidof) процессам то на каких ядрах они должны сидеть, но это не помогает. nice тоже стоит, у нужного процесса -99.

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

Путем анализа посекундных логов нагрузки каждого из ядер (периодограммный анализ) определен строгий период 5 минут, раз в 5 минут запускаются несколько апачей сразу, причем лезут они сразу на все ядра, забивают их на 80-100% чего быть не должно. Происходит это все за секунды, отловить сложно.

Подскажите, пожалуйста, возможно ли автоматически отделить один процесс от остальных (заставить apache2 не занимать ядро с номером, скажем, 0). При создании нового процесса apache2 taskset не используется, он сидит на ядрах 0-3, т.е. на всех. cgroup, по видимому, тоже запихивает в группу только существующие процессы по известным pid. Как быть с вновь создаваемыми?

На крайний случай думал лезть в исходники apache2 - если там какой-нибудь "exec apache2 -k start" дописать впереди taskset, но не уверен что это прокатит.
« Последнее редактирование: 18 Октября 2016, 03:00:06 от Metal Messiah »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #1 : 18 Октября 2016, 03:06:31 »
Вынести "важный realtime процесс" на другую машину, с реалтайм ядром.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Scorry

  • Активист
  • *
  • Сообщений: 842
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #2 : 18 Октября 2016, 11:01:54 »
Вот жеж:
One core exclusively for my process

Вот тут для общего развития:
Managing Process Affinity in Linux

Ну и гугл, как обычно, по строке "linux free up one core for process".

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #3 : 18 Октября 2016, 17:11:43 »
Scorry, планировщик ядра всё равно будет назначать другие процессы на это ядро по желанию.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Scorry

  • Активист
  • *
  • Сообщений: 842
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #4 : 18 Октября 2016, 17:55:18 »
То есть прочитанному не верить?

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #5 : 18 Октября 2016, 18:43:35 »
Metal Messiah,
только у тебя проблема машина.
Wars ~.o

Оффлайн Metal Messiah

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #6 : 18 Октября 2016, 19:13:36 »
Цитировать
Вынести "важный realtime процесс" на другую машину, с реалтайм ядром.
Машина только одна, второй нет. Раз был опыт пересборки ядра по инструкции (не этот сервер), прироста производительности не заметил (хотя он должен был быть) при этом на диске оставалась куча софта для компиляции и сборки, который занимал место и через год пришлось это все капитально чистить из-за нехватки места.

> One core exclusively for my process
Попробую по этой инструкции. Не вижу как оно будет сообщать другим процессам с заведомо неизвестными PID о том что им нельзя занимать это выделенное ядро - судя по коду там все существующие процессы по списку запихиваются куда-то, а новые об этом ничего не знают. А апачи вообще плодятся и дохнут как кролики

Начиная со строки /bin/echo 0-2 > sys/cpuset.cpus из листинга по ссылке получаю Permission denied - решение переписать команды в вид типа /bin/echo 1 > mem_hardwall


Вопрос решен, всем спасибо.
« Последнее редактирование: 19 Октября 2016, 20:20:51 от Metal Messiah »

 

Страница сгенерирована за 0.046 секунд. Запросов: 25.