2012-06-19 2 views
4

는 프로세스가 열 수있는 inotify를 인스턴스의 수에 제한이 은/proc/sys 인/FS/inotify를/max_user_instances에 지정된 사용자 ID 당 최대 수에 의해 제한됩니다FD를 inotify - 왜 프로세스가 아닌 사용자 ID 당 제한이 있습니까? 리눅스에서

자연 일이 될 것이다 예를 들어 파일 FD와 같이 프로세스별로 제한합니다. inotify FD는 사용자 ID에 의해 제한되므로 동일한 사용자 ID로 많은 프로세스가 실행될 수있는 서버에서 한계에 도달 할 확률이 높습니다. 그러나 나는 이것에 대한 이유가 있어야만한다고 생각한다.

내 코드에서 inotify를 사용해야하고 시스템에 올바른 한계를 설정해야하므로 프로그래밍 문제입니다.

+2

프로세스 당 하나의 사용자가 매우 간단하게'fork() '를 사용하여 제한을 우회 할 수 있습니다 ... – Flexo

+0

사용자 ID별로 제한되어야하는 inotify 인스턴스는 너무 비쌉니까? 우리는 inotify 시계가 추가되는 것이 아니라 FD에 대해 이야기하고 있음을 주목하십시오. – Manohar

답변

8

이유는 루트가 아닌 사용자가 inotify을 사용하여 많은 파일을 보면서 시스템을 DoSing하지 못하도록 방지하기 위해서입니다. inotify 구조는 유지하기 위해 무시할 수없는 양의 메모리가 필요합니다 (그리고 디스크로 스왑 아웃 될 수 없기 때문에) 비 특권이 얼마나 커밋 할 수 있는지에 대한 약간의 제한이 필요합니다. 결국 max_user_instances 제거하고 max_user_watches는 단지 메모리를 4 %로 설정되었지만 유사한 제한 (max_user_instancesmax_user_watches)를 가지고 사용

epoll

.

유사한 패치가 inotify에 제출되어야하지만 아직까지 제출되지 않았습니다.

파일 설명자는 완전히 다른 이유로 프로세스별로 제한됩니다. 프로세스가 시작될 때 파일 설명자 테이블이 할당되고 그 크기는 파일 설명자의 최대 허용 개수에 비례합니다. 이것을 가능한 작게 유지하면 프로세스 당 메모리 오버 헤드가 줄어 듭니다.