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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

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

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

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 26096
    • Просмотр профиля
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

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

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

Оффлайн Scorry

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

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14927
  • Я не слышу.
    • Просмотр профиля
Re: Apache на одном ядре - как сделать?
« Ответ #5 : 18 Октябрь 2016, 18:43:35 »
Metal Messiah,
только у тебя проблема машина.
~.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.063 секунд. Запросов: 24.