Linux TCP 소켓의 inode가 주어지면(를 통해 얻음 ) 이 소켓에서 얻을 수 있는 정보를 /proc/<pid>/fd
찾는 더 빠른 방법이 있습니까 ?/proc/net/tcp
프로세스를 모니터링하고 IO 작업에 대한 실시간 정보를 인쇄하는 문제 해결 도구를 작성했지만( strace
유형 정보는 더 높은 수준의 추상화로 수집되어 덜 원시적인 방식으로 표시됨) 로드가 많은 웹 서버에서는 시간이 걸리는 것으로 나타났습니다. 소켓 정보(예: 외부 주소/포트)를 조회하는 것은 크기 /proc/net/tcp
(현재 보고 있는 서버에서 약 2MB)로 인해 불가능합니다.
캐싱을 통해 이를 관리할 수 있지만 이로 인해 필연적으로 대기 시간이 발생하고 소켓에서 정보를 찾기 위해 2MB의 ASCII 텍스트를 읽고 구문 분석해야 하는 "API"의 부조리에 대해 궁금해하게 됩니다.
답변1
이것은 링크입니다libnetfilter_conntrack. 라이브러리에서 직접 C 함수 호출을 지원하는 언어로 프로그램을 다시 작성해야 합니다. 하지만 이 라이브러리에는 해당 텍스트 파일을 구문 분석하는 것보다 원하는 데이터를 더 빠르게 얻는 데 필요한 연결 고리가 있을 것이라고 생각합니다.
이것은iptstate
프로그램은 작업을 수행하는 데 사용됩니다.