Linux Too many processes 오류가 발생하는 원인과 해결 방법

Linux 서버를 운영하다 보면 새로운 프로그램을 실행하거나 서비스를 시작할 때 Too many processes 또는 Resource temporarily unavailable 오류가 발생하는 경우가 있습니다. 이 오류는 시스템에서 생성할 수 있는 프로세스 수가 한계에 도달했거나, 사용자별 프로세스 제한을 초과했을 때 발생합니다.

특히 웹 서버, 데이터베이스, Java 애플리케이션처럼 많은 프로세스를 생성하는 환경에서는 설정 문제나 프로세스 누수로 인해 자주 발생할 수 있습니다. 단순히 메모리 문제로 오해하는 경우도 많지만, 실제 원인은 프로세스 개수 제한인 경우가 적지 않습니다.

이번 글에서는 Too many processes 오류의 원인과 해결 방법을 자세히 알아보겠습니다.

Too many processes란 무엇인가?

Linux에서는 시스템 전체와 사용자별로 생성 가능한 프로세스 개수를 제한하고 있습니다.

이 제한을 초과하면 다음과 같은 오류가 발생합니다.

대표적인 오류 예시는 다음과 같습니다.

bash: fork: Resource temporarily unavailable

또는

Too many processes

또는

cannot create child process

즉, 운영체제가 새로운 프로세스를 생성할 수 없는 상태를 의미합니다.

Too many processes 오류가 발생하는 대표적인 원인

다음과 같은 경우에 자주 발생합니다.

  • 사용자별 프로세스 제한 초과
  • 시스템 전체 PID 부족
  • 무한 프로세스 생성(Fork Bomb)
  • 애플리케이션 버그
  • Zombie Process 증가
  • Docker PID 제한
  • Kubernetes PID 제한
  • 메모리 부족으로 인한 프로세스 생성 실패
  • 프로세스 종료 실패
  • 잘못된 ulimit 설정

실무에서는 현재 프로세스 개수와 제한값을 먼저 확인하는 것이 가장 중요합니다.

1. 현재 프로세스 개수 확인하기

현재 실행 중인 전체 프로세스 수를 확인합니다.

ps -ef | wc -l

시스템에서 얼마나 많은 프로세스가 실행 중인지 확인할 수 있습니다.

2. 사용자별 프로세스 확인하기

특정 사용자가 실행 중인 프로세스를 확인합니다.

ps -u username

프로세스 개수만 확인하려면

ps -u username | wc -l

특정 사용자에게 프로세스가 몰려 있는지 확인합니다.

3. ulimit 확인하기

현재 사용자의 제한값을 확인합니다.

ulimit -a

프로세스 제한만 확인하려면

ulimit -u

예시

4096

이 값보다 많은 프로세스를 생성하면 오류가 발생합니다.

4. limits.conf 확인하기

사용자별 제한을 확인합니다.

cat /etc/security/limits.conf

예시

* soft nproc 4096
* hard nproc 8192

설정이 너무 낮게 되어 있지 않은지 확인합니다.

5. PID 최대값 확인하기

시스템에서 사용할 수 있는 최대 PID를 확인합니다.

cat /proc/sys/kernel/pid_max

예시

4194304

일반적인 환경에서는 부족하지 않지만 장기간 운영되는 서버에서는 확인이 필요합니다.

6. Zombie Process 확인하기

Zombie 프로세스가 많으면 새로운 프로세스 생성에 영향을 줄 수 있습니다.

ps -el | grep Z

또는

ps aux | grep defunct

Zombie 프로세스가 계속 증가하는지 확인합니다.

7. 부모 프로세스 확인하기

Zombie Process가 많다면 부모 프로세스를 확인합니다.

ps -ef --forest

부모 프로세스가 자식 프로세스를 제대로 회수하지 못하고 있는지 확인합니다.

8. Docker 환경 확인하기

Docker에서는 PID 제한이 설정될 수 있습니다.

현재 컨테이너 상태를 확인합니다.

docker stats

컨테이너 설정을 확인합니다.

docker inspect 컨테이너명

PID 제한이 적용되어 있는지 확인합니다.

9. 시스템 로그 확인하기

관련 로그를 확인합니다.

journalctl -xe

또는

dmesg

프로세스 생성 실패나 리소스 부족 메시지가 있는지 확인합니다.

10. 불필요한 프로세스 종료하기

프로세스를 확인합니다.

ps -ef

필요 없는 프로세스를 종료합니다.

kill PID

강제 종료가 필요한 경우

kill -9 PID

운영 중인 서비스는 종료 전에 영향을 반드시 확인해야 합니다.

Too many processes 문제를 확인하는 순서

실무에서는 다음 순서대로 점검하는 것이 가장 효율적입니다.

  1. 전체 프로세스 개수 확인
  2. 사용자별 프로세스 확인
  3. ulimit 확인
  4. limits.conf 확인
  5. pid_max 확인
  6. Zombie Process 확인
  7. 부모 프로세스 확인
  8. Docker 설정 확인
  9. 시스템 로그 확인
  10. 불필요한 프로세스 종료

이 순서대로 확인하면 대부분의 원인을 빠르게 찾을 수 있습니다.

오류를 해결할 때 주의할 점

kill -9 명령으로 무조건 많은 프로세스를 종료하는 것은 위험할 수 있습니다.

먼저 어떤 프로세스가 비정상적으로 증가했는지 확인하고, 애플리케이션 버그나 무한 반복 실행(Fork Bomb)이 원인인지 분석하는 것이 중요합니다. 단순히 프로세스를 종료하면 일시적으로 해결될 수 있지만, 근본 원인을 해결하지 않으면 동일한 문제가 반복됩니다.

자주 묻는 질문

Cannot fork와 Too many processes는 같은 오류인가요?

비슷하지만 다릅니다. Cannot fork는 메모리 부족이나 프로세스 생성 실패까지 포함하는 넓은 개념이고, Too many processes는 프로세스 개수 제한을 초과한 경우에 주로 발생합니다.

Zombie Process 때문에 발생할 수 있나요?

네. Zombie 프로세스가 과도하게 누적되면 PID를 점유하여 새로운 프로세스 생성에 영향을 줄 수 있습니다.

limits.conf를 수정하면 바로 적용되나요?

아닙니다. 일반적으로 다시 로그인하거나 서비스를 재시작해야 변경된 제한값이 적용됩니다.

마무리

Too many processes 오류는 Linux 서버에서 프로세스 개수가 시스템 제한을 초과했을 때 발생하는 대표적인 오류입니다. ps, ulimit, limits.conf, pid_max, journalctl 등을 활용하여 현재 프로세스 상태와 제한값을 단계적으로 확인하면 대부분의 원인을 빠르게 파악할 수 있습니다. 특히 장시간 운영되는 서버에서는 프로세스 증가 추이를 지속적으로 모니터링하는 것이 안정적인 서버 운영에 도움이 됩니다.

댓글 남기기