소켓에 열린 파일이 너무 많습니다.

소켓에 열린 파일이 너무 많습니다.

큰 문제가 있는데, 불행히도 종료했다가 다시 시작할 수 없는 회사의 프로덕션 응용 프로그램(어떻게 해야 할지 모르겠고 실수하고 싶지 않음)이 너무 많은 파일에서 많은 예외를 발생시키고 있다는 것입니다. 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가 가지고 있는 또 다른 유사한 효과(빨간 모자 기계라고 생각합니다)를 찾고 이 임시 문제를 해결하는 방법에 대한 조언을 찾는 데 도움을 줄 수 있다면 매우 기쁠 것입니까? 이에 대한 가장 기분 좋은 해결책은 애플리케이션이 열 수 있는 파일/소켓을 늘리는 것입니다. 이것은 단지 일반 Java 애플리케이션입니다.

미리 감사드립니다!

편집하다 또 다른 해결책은 이 프로그램이 처음부터 모든 최종 플래그와 함께 실행되는 방법을 조회할 수 있는 명령이 있는 것입니다. 그러면 성공해서 다시 시작할 수 있을 것 같아요. 이것은 레거시 앱입니다.

답변1

응용 프로그램을 다시 시작하면 모든 것이 끝났습니다. ulimit -n을 2048로 변경하고 구성을 다시 로드했습니다. 그러나 모든 프로세스는 이전 구성을 상속했으며 애플리케이션을 다시 시작해야 했습니다.

관련 정보