

2008/01/16 19:50
http://blog.naver.com/hypermin/70026489770
Too many open files |
출처: http://kr.bea.com/support/customer_support/SupportPattern/08_15_Too_Many_Open_Files_Pattern.html
문제 설명 |
java.net.SocketException: Too many open files at java.net.PlainSocketImpl.accept(Compiled Code) at java.net.ServerSocket.implAccept(Compiled Code) at java.net.ServerSocket.accept(Compiled Code) at weblogic.t3.srvr.ListenThread.run(Compiled Code) |
예외 2 |
java.io.IOException: Too many open files at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.(UNIXProcess.java:54) at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.(UNIXProcess.java:54) at java.lang.Runtime.execInternal(Native Method) at java.lang.Runtime.exec(Runtime.java:551) at java.lang.Runtime.exec(Runtime.java:477) at java.lang.Runtime.exec(Runtime.java:443) ... |
첫 번째 예외는 오류가 TCP 프로토콜에 영향을 주는 경우에 발생하며 두 번째 예외는 오류가 I/O 동작 에 영향을 주는 경우 발생합니다. 아래에서 설명하는 방법으로 문제를 파악하여 해결할 수 있습니다. |
문제 해결 있습니다. |
문제 발생 원인 파일 디스크립터가 부족한 상황에서 실행되고 있음을 의미합니다(파일 디스크립터란? 참조). 을 실행하는 데 필요한 클래스를 읽기 위해 많은 파일을 엽니다. 매우 큰 응용 프로그램은 많은 파일 디스크립터를 사용할 수 있습니다. 이로 인해 새 파일 디스크립터가 부족해질 수 있습니다. 또한 새로운 각 소켓에도 디스크립터가 필요합니다. 클라이언트와 서버는 TCP 소켓을 통해 통신합니다. 브라우저의 http 요청으로 서버에 연결될 때 TCP 소켓을 사용합니다. 문제를 파악하는 것이 중요합니다. 이 문제 해결 섹션에서 각 운영 체제별 문제 해결 방법을 적용하려면 파일 디스크립터의 개수를 늘려야 할 수도 있습니다(파일 디스크립터 및 설정 참조). 페이지 맨 위
서로 다른 기간에 파일 디스크립터의 총 개수를 확인하여 파일 디스크립터 개수의 증감 여부를
파악할 수 있습니다.
이와 함께 연결이 닫히기 전 TIME_WAIT 상태 커넥션의 유지 시간을 줄일 수 있습니다 (파일 디스크립터 해제 및 시기). 사용량이 많은 서버에서 디폴트 값인 240을 사용하면 커넥션 시 도가 지연될 수 있으며, 이로 인해 커넥션의 최대 개수가 제한됩니다.
OS에 따라 다음 가이드를 통해 한 프로세스에서 모든 디스크립터를 어떻게 사용하고 있는지 모니터 링하고 진단할 수 있습니다. 페이지 맨 위 크기, i-node 등과 같은 열린 파일 및 네트워크 파일 디스크립터에 대한 정보를 표시할 수 있습니다. lsof -p <pid of process>
예제 1다음 명령은 Solaris 2.7에서 WLS 8.1SP1을 시작한 직후 실행되었습니다. 서버에서 실행 중인 Java 프로세스(pid 390)에 의해 84개의 파일 디스크립터가 할당되었음을 보여줍니다. 이 숫자는 파일 디스크립터의 디폴트 hard limit보다 훨씬 작습니다. $ lsof -p 390 | wc -l
84
확인할 수 있습니다. 즉, 프로세스에서 파일 디스크립터가 부족합니다. 수 있습니다. 닫혀있어야 할 파일이 목록에 표시되는 경우 해당 파일이 예상대로 닫히지 않은 이유를 조사할 수 있습니다. |
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME /myserver_uddi_uddi/jarfiles/_wl_cls_gen.jar /myserver_uddi_uddi/jarfiles/WEB-INF/lib/jsse39153.jar |
lsof .h는 가능한 모든 구문 및 옵션을 표시합니다. 이 프로그램의 최신 버전은 http://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/lsof/에서 구할 수 있습니다. 표시할 수 있습니다. |
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME in.telnet 29705 root 2u inet 0x30002808fd8 0t76 TCP aaaaabbbb:telnet->abcdef.bea.com:3886 (ESTABLISHED) |
HP에서 WebLogic Server를 실행할 때에는 성능 모니터링 도구인 glance를 사용하여 열린 파일의 총 개수를 파악할 수도 있습니다. (이 도구는 http://www.hp.com/에서 구할 수 있습니다.) 수도 있습니다. 각 파일 디스크립터는 이 디렉토리에 있습니다. 핸들 정보를 표시할 수 있습니다. 특정 프로세스에 대해 사용할 수도 있습니다. |
C:\tmp>ps -ef | grep java usera 1656 1428 0 10:11:41 CONIN$ 0:46 c:\Releases\WLS8.2\JDK141~1\bin\java -client -Xms32m -Xmx200m -XX:MaxPermSize=128m -Xverify:none -Dweblogic.Name=myserver -Dweblogic.ProductionModeEnabled= -Djava.security.policy="c:\Releases\WLS8.2\WEBLOG~1\server\lib\weblogic.policy" weblogic.Server |
C:\tmp>handle -p java Handle v2.10 Copyright (C) 1997-2003 Mark Russinovich Sysinternals - www.sysinternals.com ------------------------------------------------------------------------------ java.exe pid: 1656 ABCDEF\usera 18: File C:\Releases\WLS8.2\user_projects\domains\mydomain 170: File C:\Releases\WLS8.2\jdk141_05\jre\lib\rt.jar 178: File C:\Releases\WLS8.2\jdk141_05\jre\lib\sunrsasign.jar 180: File C:\Releases\WLS8.2\jdk141_05\jre\lib\jsse.jar 188: File C:\Releases\WLS8.2\jdk141_05\jre\lib\jce.jar 190: File C:\Releases\WLS8.2\jdk141_05\jre\lib\charsets.jar 328: File C:\Releases\WLS8.2\jdk141_05\jre\lib\ext\dnsns.jar 330: File C:\Releases\WLS8.2\jdk141_05\jre\lib\ext\ldapsec.jar 338: File C:\Releases\WLS8.2\jdk141_05\jre\lib\ext\localedata.jar 340: File C:\Releases\WLS8.2\jdk141_05\jre\lib\ext\sunjce_provider.jar 348: File C:\Releases\WLS8.2\jdk141_05\lib\tools.jar 350: File C:\Releases\WLS8.2\weblogic81\server\lib\weblogic.jar 358: File C:\Releases\WLS8.2\weblogic81\server\lib\jconn2.jar 360: File C:\Releases\WLS8.2\weblogic81\server\lib\ojdbc14.jar 368: File C:\Releases\WLS8.2\weblogic81\server\lib\xmlx.jar 370: File C:\Releases\WLS8.2\weblogic81\server\lib\webservices.jar 378: File C:\Releases\WLS8.2\weblogic81\server\lib\wlcipher.jar 3e0: File C:\Releases\WLS8.2\weblogic81\server\lib\ant\ant.jar 3e8: File C:\Releases\WLS8.2\weblogic81\server\lib\EccpressoJcae.jar 3f0: File C:\Releases\WLS8.2\weblogic81\server\lib\EccpressoCore.jar 3f8: File C:\Releases\WLS8.2\weblogic81\server\lib\EccpressoAsn1.jar 400: File C:\Releases\WLS8.2\weblogic81\server\lib\jConnect.jar 408: File C:\Releases\WLS8.2\weblogic81\server\lib\ant\optional.jar 410: File C:\Releases\WLS8.2\weblogic81\server\lib\ant\jakarta-oro-2.0.7.jar 갋. C:\tmp>handle -p java | wc -l 65 |
WLS 8.1SP2 실행 시 Windows에서 65개의 파일 핸들을 사용했음을 알 수 있습니다. 고급 유틸리티입니다. 이 도구는 GUI 인터페이스로 구성되어 있으며 실행 중인 각 프로세스에 대해 자세한 정보를 표시합니다. 이 프로그램을 사용하여 특정 핸들을 검색할 수 있습니다. 이 도구는 http://www.sysinternals.com/ntw2k/freeware/procexp.shtml에서 구할 수 있습니다. 다음은 예제 출력 화면입니다. |

WLS 실행 시 java 프로세스에서 884개의 핸들을 사용했고 이 중 일부(65개) 핸들만 열린 파일을 참조하고 있음을 알 수 있습니다. 페이지 맨 위 모든 데이터 전송을 완료하기 위해 소켓을 닫더라도 TIME_WAIT으로 변환되었다가 최종 승인(ACK)에 의해 데이터 전송이 종료됩니다. 이 경우 파일 디스크립터의 해제를 지연시킵니다. 이 TIME_WAIT 시간은 Unix 시스템에서 tcp_time_wait _interval이라는 커널 매개변수로 정의됩니다. Windows NT, Windows 2000 및 Windows XP의 경우 이 시간은 레지스트리의 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters라는 시스템 키의 TcpTimedWaitDelay 로 정의됩니다. 페이지 맨 위 페이지 맨 위 soft nofile 1024
hard nofile 4096 다음 세 행을 /etc/rc.d/rc.local 시작 스크립트에 추가하여 시스템 전체의 파일 디스크립터 제한을 설정할 수도 있습니다. # Increase system-wide file descriptor limit.
echo 4096 > /proc/sys/fs/file-max echo 16384 > /proc/sys/fs/inode-max Windows |
추가 도움말이 필요하십니까? 패턴대로 작업했지만 추가 도움말이 필요한 경우 다음과 같이 할 수 있습니다.
이렇게 해도 문제를 해결할 수 없는 경우 유효한 유지보수 계약이 되어 있다면 http://support.bea.com/에 로그인하여 Support Case를 신청할 수 있습니다. |
고객 의견 이 지원 진단 패턴 "Too many open files"이 도움이 되셨습니까? 여러분에게 꼭 필요한 정보나 지원 진단 패턴에 새로 추가하길 바라는 항목이 있으면 저희에게 알려주시기 바랍니다. |
책임의 한계에 대한 고지: BEA Systems, Inc.는 사용자와 BEA 간의 유지 보수 및 지원 계약 내용에 따라 이 웹 사이트에 기술 팁과 패치를 제공합니다. BEA에서 허가한 소프트웨어와 함께 이 정보 및 코드를 사용할 수 있지만 BEA는 기술 팁 및 패치와 관련하여 어떠한 명시적이거나 암시적인 보증도 하지 않습니다. 이 문서에 참조된 상표는 해당 소유자의 자산입니다. 자세한 상표 정보를 보려면 제품 설명서를 참조하십시오. |
[출처] Java, Too many open files|작성자 형기
댓글 없음:
댓글 쓰기