У нас есть Linux-сервер, нормально работающий в prod в течение нескольких недель, пока наша пользовательская база не начала расти, а наш Java-сервер не начал давать сбой во многих местах! Оказывается, что все файлы и сокеты выходят из строя, потому что возвращается «слишком много открытых файлов». Я считаю, что достиг каких-то пределов открытия файлов.
Как я могу это изменить? Команда ulimit показывает "без ограничений".
Есть другие идеи?
Я считаю, что это ограничение для каждого процесса? Потому что я все еще могу открывать файлы, например, vi ...
Вот полный вывод ulimit
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4160
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Ваш лимит на открытые файлы установлен на 1024, а не на неограниченный. Измените с помощью ulimit -n для тестирования и в /etc/security/limits.conf для производственного использования.
SvenW стоит на деньгах.
Просто добавлю, если вы не хотите применять новую политику в рамках всей системы; Например, пользователь, запускающий процесс Java, также выполняет другие обязанности. Вполне может быть root. Затем вы можете отредактировать или создать оболочку для запуска вашего Java-приложения, которое выполняет ulimit -nX
перед запуском. Очевидно, вам следует поиграть со значением X, чтобы найти разумное число, соответствующее вашим требованиям.