У меня большая проблема: производственное приложение моей компании, которое я, к сожалению, не могу закрыть и перезапустить (не знаю как, и не хочу допустить ошибку), выдает множество исключений при слишком большом количестве открытых файлов при попытке открыть сокет для чтения с FTP-сервера.
2013-01-02 16:19:03,222 ERROR [main] software.background.Program(Program.java:doExecute{225}) - Exception during ftp transfer
someclasses.ftp.FtpException: Could not create connection to xxxx
at someclasses.communication.ftp.FtpImpl.connect(FtpImpl.java:114)
at Program.doExecute(Program.java:176)
at Program.main(Program.java:287)
Caused by: java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:397)
at java.net.Socket.<init>(Socket.java:371)
at java.net.Socket.<init>(Socket.java:189)
at someclasses.Ftp.connect(Ftp.java:386)
Я понимаю, что достигнут предел открытых файлов/сокетов и т. д. для каждого приложения. Есть ли способ увеличить этот максимум на данный момент, не закрывая приложение? Я запустил команду, ulimit
и она сообщает unlimited
. Я попытался проверить, сколько соединений открыто с помощью lsof -p PID
команды, но она сообщает «команда не найдена».
Был бы очень рад, если бы кто-нибудь помог мне найти другой похожий эффект, который есть у lsof (я думаю, это машина Red Hat) и совет, как исправить это временно? Самым приятным решением было бы увеличить количество файлов/сокетов, которые приложение может открыть. Это просто обычное приложение Java.
Заранее спасибо!
РЕДАКТИРОВАТЬ Другим решением было бы, если бы была какая-то команда, с помощью которой я мог бы посмотреть, как эта программа была запущена с самого начала со всеми возможными флагами. Тогда я, возможно, смог бы перезапустить ее с успехом. Это устаревшее приложение.
решение1
Все закончилось перезапуском приложения. Я изменил ulimit -n на 2048 и перезагрузил конфиг. Однако все процессы унаследовали старый конфиг и приложение пришлось перезапустить.