컨텍스트 : 나는 실수로 파이프가 새는 Java 기반 네트워크 서버에서 작업 중입니다. 며칠에 한 번씩 40,000 개의 파일 설명자를 제한하여 죽습니다. 사망하기 전에 서버에서 lsof
을 사용하면 파이프로 막혔습니다. 파이프는 다른 프로세스가 아닌 자체에 연결됩니다.특정 시스템 호출이있을 때 java 스택 추적 기록?
코드베이스의 어떤 부분도 파이프를 생성하거나 사용하지 않습니다.
일부 이전 버전의 JVM에서는 소켓을 만들 때 & 파이프가 누출되었지만이 버그는 Java 1.7.0_75에서 나타납니다.
내 질문은입니다 : 현대 리눅스 툴 체인을, (예 퍼포 레이션)를 사용하기는 pipe(2)
시스템 콜 호출 할 때 가능 과정을 스냅 샷입니다 - 내가 파이프를 생성하는 유일한 방법입니다 생각합니다. 게다가, 그때부터 자바 스택 추적을 검색 할 수 있습니까?
이 정보가 주어지면 "누가 파이프를 만들고 있습니까?"라는 질문에 대답 할 수 있어야합니다.
난 당신이'Selectors'를 유출하는 제안을 포함하여이 작업을 수행하는 방법에 대한 다양한 가이드가
있습니다. – EJP
LD_PRELOAD를 사용하여'pipe'를 자신의 함수로 대체하는 것을 고려하십시오. – Nykakin
@EJP - 매혹적인 아이디어. 어떻게하면 구체적인 진단을 내릴 수 있습니까? –