У меня есть приложение node.js
, работающее на нескольких системах за балансировщиком нагрузки nginx. В дневные и пиковые часы эти узлы начинают потреблять больше памяти и процессоров и изящно перезагружаются, когда достигают порога 640 МБ памяти. Перезапуски управляются сценарием PM2
json и max-memory-restart
.
Проблема теперь в том, что иногда, не всегда, после перезапуска новый процесс не может быть запущен, потому что порт все еще используется. Это происходит случайным образом на всех узлах.
Ошибка:
Ошибка: прослушайте EADDRINUSE: адрес уже используется ::: 8888
at Server.setupListenHandle [как _listen2] (net.js: 1255: 14)
в listenInCluster (net.js: 1303: 12)
на Server.listen (net.js: 1391: 7)
...
Сценарий server.json:
{
"name" : "server.json",
"script" : "server.js",
"max_memory_restart" : "640M",
"log_date_format" : "YYYY-MM-DD HH:mm Z"
}
Что может быть не так? Примечание: я не могу запустить server.json в режиме кластера, потому что у меня только один процессор на систему.