Linux에서 열린 파일 및 실행중인 프로세스 수를 제한하는 이유는 무엇입니까?


14

운영 체제 내부 작업에 대한 지식이 많지 않으므로 Linux에서 열린 파일 및 실행중인 프로세스의 최대 수에 제한이있는 이유는 무엇입니까?

누군가 나를 이해하도록 도울 수 있다면 고맙겠습니다.

답변:


16

이것은 주로 역사적인 이유로 인한 것입니다. 구형 Linux 메인 프레임에서는 많은 사용자가 메인 프레임의 리소스를 연결하고 사용합니다. 물론, 제한이 필요했고 파일 핸들 및 프로세스와 같은 작업이 커널에 내장 되었기 때문에 제한되었습니다. 또한 포크 폭탄 과 같은 공격을 제한하는 데 도움이됩니다 . 공정 한계를 사용하여 양식 폭탄에 대한 방어가 여기 에 표시 됩니다 .

또한 포크 폭탄이 수행하는 것과 유사한 런 어웨이 포크 및 파일 열기를 허용하지 않아 복잡한 서비스 및 데몬을 점검 할 수 있습니다.

또한 사용 가능한 RAM 및 CPU의 양과 같은 점과 32 비트 카운터가 너무 많은 참조 만 할 수 있다는 사실 (32 비트 카운터로 계산할 수있는 4294967296 항목 만 해당)이지만 그러한 한계는 훨씬 큽니다. 일반적으로 프로그래머와 시스템 관리자가 설정 한 것보다 큽니다. 어쨌든, 4294967296 프로세스가 있기 훨씬 전에, 계획된대로 또는 다른 자원이 고갈되어 시스템이 잠긴 것처럼 시스템이 재부팅되었을 것입니다.

584 TiB의 메모리로 Titan 을 실행하지 않는 한 (리눅스는 수퍼 컴퓨터에서 하나의 인스턴스로 실행될 수 없기 때문에)이 프로세스 한계에 도달하지 못할 것입니다. 그럼에도 불구하고 평균 프로세스에는 공유 메모리가 없다고 가정 할 때 대략 146KB의 메모리 만 있습니다.


2
포크 폭탄의 경우 +1,주의없이 쉘에서이 재귀 방법을 사용할 경우 얼마나 위험한지를 보여줍니다!
aka_learner

9

인생과 리눅스에서 대부분의 모든 것에 한계가 있습니다. 때로는 한계가 매우 높고 걱정할 가치가 없으며 때로는 너무 느리거나 게으른 프로그래머가 임의로 설정하거나 하드웨어 한계로 설정하기도합니다.

프로그래머가 주소와 같이 필드에 허용되는 최대 문자 수와 같은 결정을 내릴 때 임의의 한계가 발생합니다. 필요에 따라 메모리를 동적으로 할당하는 것보다 임의의 제한을 설정하는 것이 훨씬 쉽습니다. 사용 가능한 모든 메모리를 간단한 입력 필드에 할당하고 싶지는 않지만 입력이 중요한 다른 메모리를 덮어 쓰도록 허용하지는 않습니다. 열린 파일 및 프로세스의 경우 임의의 제한이 있거나 사용 가능한 메모리에 의해 제한 될 수 있습니다. 후자가 한계에 다다르면 나쁜 일이 일어나기 시작하고 시스템이 멈출 수 있기 때문에 그 일이 일어나기 전에 한계를 두는 것이 좋습니다. 때때로 임의의 한계는 메모리 또는 디스크 공간에 따라 시작시 결정될 수 있으며 일반적으로 상당히 지능적입니다.

그런 다음 정수 나 문자의 크기와 같은 하드웨어에 의해 설정된 제한이 있습니다. 32 비트 시스템을 사용하는 경우 정수의 최대 크기 (부호없는 경우 4,294,967,295 또는 부호있는 경우 절반)로 설정된 한계가 있습니다.


1
임의의 것으로 보이는 한계는 실제로 표준을 기반으로 할 수 있습니다. 국제 표준 우편 주소 행은 39 자로 제한됩니다. 이러한 제한은 임의적으로 나타날 수 있습니다. 주소에 대한 60 자 제한은 임의적입니다. 불행히도 너무 적은 프로그래머가 표준을 확인하므로 너무 많은 (때때로 올바른) 한계가 임의로 결정됩니다.
BillThor

나는 동의한다; 여전히 프로그래머로 일하고 있었을 때, 당신이 말했거나 OS에서 매크로 (예 : max_path 등)로 정의 된 명시된 한계를 찾는 데 많은 시간을 소비했습니다. 그러나 임의의 한계는 일반적으로 필드 길이의 경우 한계가없는 것보다 낫습니다. :)
Marty Fried

7

프로세스의 경우 / proc / sys / kernel / pid_max는 허용되는 최대 pid이므로 즉시 실행할 수있는 프로세스 수의 하드 한계입니다. 그러나 메모리 제한은 일반적으로 그 전에 잘 작동합니다.

전체 시스템에서 열린 파일에 대한 상한의 경우 / proc / sys / fs / file-max가 하드 한계입니다. 이는 시스템의 메모리 양을 기반으로하므로 달라질 수 있습니다. 커널은 이것을 다음과 같이 설정합니다 :

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

1MB의 RAM마다 약 100으로 작동합니다.

프로세스 당 한계가 다릅니다. ulimit가이를 정의합니다.


-5

컴퓨터에 한계가 있고 4GB의 RAM이 있기 때문에 한계가 있습니다. 이제 15 게임을 실행할 수 없습니까?

나는 아마도 약간의 지연으로 그것을 실행할 수는 있지만 인간이 아닐 것입니다. 그것은 PC와 Linux의 Kernal의 한계입니다. .

Windows 7을 실행했을 때의 랩탑과 마찬가지로 전장을 플레이 할 수 있었지만 RAM의 80 %를 차지했기 때문에 "Need For Speed"를 재생하려고하면 60 %가 소요됩니다. 일반적으로 둘 다 열 수 있지만 전체 시스템은 2 개의 중장비 프로그램을 실행 한 후 속도가 느려져 RAM (Random Access Memory)을 위해 싸우고 있습니다.

간단히 말해서, 일반 컴퓨터는 한 번에 많은 프로그램을 실행할 수 없습니다. 음악, 메모장, 브라우저, 이메일, 게임, 당신은 컴퓨터에 많이 있다고 생각하지만 그저 단순한 것입니다. 월드 오브 워크래프트와 같은 게임에는 더 많은 RAM이 필요합니다. 컴퓨터에 어려움을 겪습니다 (고가의 랩톱과 같이 8-16GB의 RAM이 없다면!)


많은 프로세스가 동시에 실행되는 경우 CPU로드가 높고 CPU 코어의 트래픽이 처리하기에 너무 많으며 시간이 지남에 따라 시스템이 적절한 상태를 유지하지 않고 정지 상태가되는 프로세스에 대한 정보에 감사합니다 실행하는 프로세스 중 하나에 시간 조각 내가 틀린지 추측합니다. 그러나 왜 리눅스에서 열린 파일에 제한이 있습니까?
aka_learner

나는 열린 파일의 한계에 대해 모른다. 나는 전혀 경험하지 못했다. 어쩌면 그것은 내 컴퓨터에 비해 컴퓨터가 제한적일지도 모른다. 나는 항상 몇 개의 10 파일을 연 다음 웹 브라우저, 음악 플레이어 및 터미널을 열었습니다.
Ubisoft Terzuz

일반적으로 mysql 데이터베이스에서 "120428 20:30:01 [오류] / usr / sbin / mysqld : './djlabo_open/cart_layout.frm'(errno : 24) 파일을 열 수 없습니다. linux가이 데이터베이스 파일을 열 수 없기 때문에 오류 로그에 오류가 있습니다.
aka_learner 18

아마도 파일을 여는 OS 제한과 다른 것입니다.
Nanne

1
@Terzuz 사람들이 서로의 답변을 사실적으로 옳다고 생각하는지 여부에 기반합니다. 불행히도 나를 포함하여 많은 사람들 이이 답변이 실제로 질문에 언급 된 한계를 다루지 않을 수도 있고 다른 한계를 다루는 것처럼 느낍니다.
복원 모니카-ζ--
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.