У меня есть процесс node.js, непрерывно работающий на экземпляре linux EC2, он извлекает данные и сохраняет их в mysql. Некоторые операции чтения также выполняются в базе данных.
Процесс может работать в течение нескольких часов или дней и потреблять постоянную память. Но время от времени он начинает потреблять все больше и больше оперативной памяти, увеличивая ее до 100%, в результате чего сервер перестает отвечать.
Сначала я подумал об утечке памяти, но ничего не нашел.
Затем я взглянул на ввод-вывод (используя параметр «Подробное время ЦП» htop) и увидел, что существует много Iowait (полоса ЦП остается серой) одновременно с использованием ОЗУ узла. js увеличивается.
Правильно ли интерпретировать, что существует корреляция между проблемой 100% потребления ОЗУ и проблемой производительности ввода-вывода? Или мне следует вернуться к расследованию утечки памяти?
обновление: я запустил тот же код, обрабатывая тот же объем данных на сервере от другого облачного провайдера. У меня пока нет пика использования памяти. Я собираюсь переключиться на этого провайдера и забыть об этом. Все еще любопытно узнать, в чем может быть причина проблемы. оборудование? какая-то конфигурация?
Правильно ли интерпретировать, что существует корреляция между проблемой 100% потребления ОЗУ и проблемой производительности ввода-вывода?
У вас все наоборот - наиболее вероятный сценарий заключается в том, что конкуренция за память вызывает высокий уровень ввода-вывода. Когда объем свободной оперативной памяти сокращается, страницы начинают выгружаться на диск, что снижает производительность ввода-вывода.
Или мне следует вернуться к расследованию утечки памяти?
Ага. Еще один шаг вы мог Можно было бы перенести своп на отдельный шпиндель, чтобы он не конкурировал за ввод-вывод с остальной частью сервера. Однако это должно быть только временным пластырем.