내 경험은 프로세스 수가 많은 작업은 다음과 같이 성공한 것입니다.
kern.maxproc=2500 # This is as big as I could set it.
kern.maxprocperuid=2048
ulimit -u 2048
/etc/sysctl.conf
안정적인 설정을 위해 처음 두 개는 launchd.conf에 들어가고 ulimit 값으로 들어갈 수 있습니다.
tcp / ip가 내가하고있는 일의 일부이기 때문에, 나는 또한 강화해야했다.
kern.ipc.somaxconn=8192
기본 128에서.
프로세스 제한을 늘리기 전에 리소스가 부족한 "포크"오류가 발생했습니다. kern.ipc.somaxconn을 늘리기 전에 "깨진 파이프"오류가 발생했습니다.
이것은 내 괴물 Mac, OS 10.5.7, 10.5.8, 현재 10.6.1에서 공정 번호 (500-4000)의 분리 된 프로세스를 실행하는 동안 발생했습니다. 내 상사 컴퓨터의 Linux에서 방금 작동했습니다.
프로세스 수는 1000에 가까울 것이라고 생각했지만 시작한 모든 프로세스에는 실제 작업을 수행하는 실제 항목 외에도 자체 쉘 사본이 포함 된 것으로 보입니다. 매우 축제.
나는 다음과 같은 디스플레이 장난감을 썼다 :
#!/bin/sh
while[ 1 ]
do
n=netstat -an | wc -l
nw=netstat -an | grep WAIT | wc -l
p=ps -ef | wc -l
psh=ps -ef | fgrep sh | wc -l
echo "netstat: $n wait: $nw ps: $p sh: $psh"
sleep 0.5
done
그리고 ps -ef의 최대 프로세스 수와 netstat TIME_WAIT
에서 만료 되기를 기다리는 것을 보았습니다 TIME_WAIT
.
한계를 높이기 전에 1K 미만으로 시작했지만 1190의 높은 값으로 상승한 실패 임계 값을 몰래 움직일 수있었습니다. 실패 할 때마다 다음에 조금 더 걸릴 수 있습니다. 캐시는 실패 할 때마다 한계까지 확장되었습니다.
최종 진술로 내 테스트 케이스에 "대기"가 있었지만 종료 된 후에도 분리 된 프로세스가 많이 남아있었습니다.
인터넷에 게시 할 때 사용한 대부분의 정보를 얻었지만 모든 정보가 정확하지는 않았습니다. 마일리지가 다를 수 있습니다.