카테고리 없음
[MongoDB ]Failed to unlink socket file: Operation not permitted 해결 과정
solutionMan
2025. 1. 14. 21:22
반응형
1. MongoDB 프로세스 강제 종료
현재 실행 중인 MongoDB 프로세스를 확인하고 강제로 종료
1번)
sudo systemctl stop mongod
2번)
ps aux | grep mongod
- MongoDB 프로세스 ID(PID)를 확인한 후, 해당 프로세스를 강제 종료합니다.
sudo kill -9 <MongoDB 프로세스 ID>
2. /tmp/mongodb-27017.sock 파일 삭제
MongoDB 프로세스를 종료한 후, 소켓 파일을 강제로 삭제합니다
sudo rm -f /tmp/mongodb-27017.sock
3. /tmp 디렉토리 권한 확인 및 수정
/tmp 디렉토리 권한이 적절한지 확인하고, 필요 시 수정합니다
ls -ld /tmp
- /tmp 디렉토리의 권한이 drwxrwxrwt (즉, 1777)인지 확인합니다.
- 권한이 올바르지 않다면 다음 명령어로 수정합니다:
sudo chmod 1777 /tmp
4. MongoDB 재시작
이제 MongoDB를 다시 시작합니다.
sudo systemctl start mongod
5. 로그 파일 확인
MongoDB가 정상적으로 시작되었는지 로그 파일에서 확인합니다.
sudo tail -f /var/log/mongodb/mongod.log
- 오류나 경고 메시지가 발생하는지 확인하고, 관련된 문제를 점검합니다.
6. MongoDB 상태 확인
MongoDB가 정상적으로 실행되고 있는지 확인합니다.
sudo systemctl status mongod
mongo rs.status()
sudo systemctl restart mongod
1. MongoDB 소켓 파일 오류 (MongoDB Socket File Error)
문제
bash
코드 복사
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted Fatal Assertion 40486 at src/mongo/transport/transport_layer_asio.cpp 684
- 원인: MongoDB가 종료되지 않거나 비정상적으로 종료되면 /tmp/mongodb-27017.sock라는 소켓 파일이 남을 수 있습니다. MongoDB는 이 파일을 사용하여 클라이언트와 통신합니다. 만약 MongoDB 프로세스가 비정상적으로 종료되었거나 충돌이 발생하여 소켓 파일이 남아 있으면, MongoDB가 다시 시작될 때 이 파일을 삭제하지 못하고 오류를 발생시킬 수 있습니다.
- 해결 방법:
- MongoDB 서비스를 정지하고, /tmp/mongodb-27017.sock 파일을 수동으로 삭제하거나, 이를 위해 rm 명령을 사용할 수 있습니다.
- 만약 소켓 파일이 삭제되지 않으면, chown 또는 chmod를 사용하여 권한을 수정할 수 있습니다.
2. MongoDB의 비정상 종료 및 강제 종료
문제
less
코드 복사
mongod.service: Main process exited, code=killed, status=9/KILL
- 원인: MongoDB 프로세스가 kill 명령에 의해 강제로 종료되었을 수 있습니다. status=9/KILL은 프로세스가 SIGKILL 신호로 종료되었음을 의미하며, 이는 시스템 관리자나 다른 프로세스에서 수동으로 종료시키거나, 시스템에서 자동으로 종료되었을 수 있습니다.
- 해결 방법:
- 시스템 자원 부족: 시스템에서 메모리나 CPU 자원이 부족해 MongoDB 프로세스가 자동으로 종료될 수 있습니다. 메모리 부족 시 시스템은 강제 종료를 발생시킬 수 있습니다. 이를 해결하려면 MongoDB의 메모리 사용량을 조정하거나, 시스템 리소스를 더 확보하는 방법을 고려해야 합니다.
- 로그 파일 분석: systemctl이나 journalctl을 사용하여 종료 원인에 대한 자세한 로그를 분석해야 합니다.
- 자동 재시작 설정: MongoDB 서비스가 강제로 종료되었을 때 자동으로 재시작되도록 설정할 수 있습니다. systemd의 Restart=always 옵션을 활성화하여 서비스가 종료되면 자동으로 다시 시작하도록 할 수 있습니다.
3. 메모리 부족 (Out of Memory) 및 tcmalloc 오류
문제
makefile
코드 복사
tcmalloc: large alloc 1073741824 bytes == 0x5615e034c000
- 원인: tcmalloc은 메모리 할당과 관련된 라이브러리입니다. 이 오류는 MongoDB가 메모리 할당을 요청할 때, 시스템에서 요구된 크기의 메모리를 할당하지 못했음을 나타냅니다. 예를 들어, tcmalloc: large alloc은 MongoDB가 너무 많은 메모리를 요청했거나 시스템이 메모리를 부족하게 가지고 있을 때 발생합니다.
- 해결 방법:
- 메모리 리소스 확인: free -m 또는 htop 명령어로 시스템의 메모리 사용량을 확인합니다. 메모리가 부족하면 시스템의 물리적 메모리를 늘리거나, MongoDB 설정에서 wiredTigerCacheSizeGB와 같은 설정을 조정하여 메모리 사용량을 줄일 수 있습니다.
- 메모리 최적화: MongoDB의 storage.wiredTiger.engineConfig.cacheSizeGB를 통해 캐시 크기를 줄여 메모리 사용량을 조정할 수 있습니다.
- 메모리 리밋 설정: MongoDB의 리소스 사용에 대한 제한을 두는 방법도 있습니다.
4. 디스크 공간 부족 (Disk Space)
- 문제: 시스템 디스크가 꽉 차서 MongoDB가 데이터베이스를 기록하지 못하거나 운영을 하지 못할 수 있습니다. 디스크 공간 부족은 MongoDB의 성능을 저하시킬 수 있으며, 최악의 경우 데이터 손실을 유발할 수도 있습니다.
- 해결 방법:
- 디스크 사용량 확인: df -h 명령을 사용하여 디스크 공간을 확인하고, 공간이 부족하다면 불필요한 파일을 삭제하거나 디스크 용량을 확장할 필요가 있습니다.
- 로그 파일 관리: MongoDB 로그 파일이 커져서 공간을 차지하는 경우가 많습니다. 로그 파일을 주기적으로 순환시키거나, logRotate 설정을 통해 로그 파일을 관리할 수 있습니다.
5. MongoDB 재시작 실패 (Restart Failures)
문제
sql
코드 복사
mongod.service: Failed with result 'signal'.
- 원인: MongoDB 서비스가 시작되지 않거나 종료되는 이유는 다양합니다. systemd 서비스가 실패한 경우 result=signal이 나타날 수 있으며, 이는 MongoDB가 내부적으로 예외가 발생해 비정상 종료되었음을 나타냅니다. 예를 들어, systemctl restart mongod 명령으로 서비스를 재시작할 때 문제가 발생할 수 있습니다.
- 해결 방법:
- 로그 분석: MongoDB 로그(/var/log/mongodb/mongod.log)와 journalctl 로그를 통해 구체적인 오류 메시지를 확인하고 문제를 해결합니다.
- 구성 파일 확인: /etc/mongod.conf 파일에서 설정이 잘못되어 서버가 시작되지 않을 수 있습니다. 설정 파일을 검토하고 MongoDB에서 필요로 하는 자원(예: 메모리, 디스크 공간 등)이 충분한지 확인합니다.
6. MongoDB 설정 파일 오류 (Configuration File Errors)
- 문제: MongoDB의 설정 파일(/etc/mongod.conf)이 잘못 구성되어 있을 수 있습니다. 예를 들어, 잘못된 포트 번호, 데이터베이스 경로, 로그 파일 경로 등이 설정될 수 있습니다.
- 해결 방법:
- 설정 파일 검토: MongoDB 설정 파일을 검토하여 잘못된 설정을 수정합니다. 예를 들어, 잘못된 파일 경로나 포트 번호가 설정되어 있으면 MongoDB가 시작되지 않을 수 있습니다.
- 기본 설정으로 돌아가기: 설정 파일을 초기화하거나 기본 설정으로 되돌려 문제를 해결할 수 있습니다.
7. 클러스터 연결 문제 (Replica Set and Network Issues)
- 문제: MongoDB가 클러스터 모드에서 동작하는 경우, 네트워크 연결 문제나 멤버 노드 간의 통신 장애로 인해 서비스에 영향을 줄 수 있습니다. 예를 들어, Replica Set 설정에서 일부 노드가 연결되지 않거나, connect 문제가 발생할 수 있습니다.
- 해결 방법:
- 클러스터 상태 확인: rs.status() 명령어를 사용하여 Replica Set의 상태를 확인합니다.
- 네트워크 연결 확인: MongoDB 인스턴스 간의 네트워크 연결을 확인하고, 필요한 포트가 열려 있는지 점검합니다.
결론
위 문제는 MongoDB가 비정상적으로 종료되거나 시작되지 않는 원인을 여러 가지 관점에서 설명하고 있습니다. 주된 원인은 시스템 자원 부족, 비정상적인 종료, 디스크 공간 부족, 설정 파일 오류 등입니다. 이를 해결하려면 시스템 상태와 MongoDB 로그를 면밀히 분석하고, 리소스 문제를 해결하는 것이 중요합니다.
반응형