2017-10-04 7 views
0

데비안 시스템에 지정된 양의 활성 스레드를 생성하는 프로그램이 있습니다. 내가 100 이상을 만들려고 할 때 OS 제한에 도달했을 때 "스레드를 만드는 중 오류가 발생했습니다"라는 오류가 발생하고 컴퓨터가 들어오는 연결을 허용하지 않고 명령을 실행할 때 "bash : fork : 메모리를 할당 할 수 없습니다" . 최고 명령을 살펴보면 작업이 32564로 최대화되고 있으며 RAM의 20 % 만 활용 중입니다. 나는 ulimit -a & -n을 500000으로 편집하고 -s를 81920으로 편집하려고했지만 여전히 아무 것도하지 않습니다. 어떤 도움을 주셔서 감사합니다 /.데비안에서 쓰레드가 부족합니다.

+1

최대 사용자 프로세스 수를 늘리지 않는 이유는 무엇입니까 ('ulimit -u')? – myaut

+1

일부 [PAM] (https://en.wikipedia.org/wiki/Pluggable_authentication_module) 제한이 될 수 있습니다. '/etc/security/limits.conf' 등을보십시오. 그러나 값 비싼 멀티 소켓 서버가 없다면 100 * runnable * 스레드를 만드는 것은 무리가 있습니다. –

+0

100 개가 넘는 스레드가 정말로 필요합니까? OS는 여전히이 스레드를 다른 스레드와 교환해야한다는 것을 기억하십시오. 별도의 코어에서 스레드를 독점적으로 실행하도록 OS에 알리지 않는 한, 스레드를 다른 프로세스와 스왑해야합니다. –

답변

0

내 경험에 비추어 볼 때, CPU를 사용하는 프로세스의 성능을 향상시키기 위해 스레드를 사용할 때는 하이퍼 스레드 시스템을 제외하고 코어와 동일한 수의 스레드를 사용하는 것이 좋습니다. 두 배의 코어를 사용하십시오. 결론적으로 볼 수있는 다른 규칙은 I/O 바인딩 프로세스입니다. 이 규칙은 하이퍼 스레드 시스템의 경우를 제외하고는 코어 당 스레드 수를 4 배로 늘린 다음 코어 당 스레드 수를 4 배로 늘릴 수 있습니다. 그래서 어쨌든 100 개의 스레드를 만들어서는 안됩니다. 그냥 "충분"하십시오.

관련 문제