티스토리 뷰

갑자기 서버에 CORS 에러가 났다.

 

PM2 로그($pm2 logs)를 확인해보니

Error: ENOSPC: no spase left on device, write

/home/ubuntu/.pm2/logs/api-error.log last 15 lines:
0|api      |       throw er; // Unhandled 'error' event
0|api      |       ^
0|api      |
0|api      | Error: ENOSPC: no space left on device, write
0|api      | Emitted 'error' event at:
0|api      |     at WriteStream.<anonymous> (/home/ubuntu/calvak-api/node_modules/file-stream-rotator/FileStreamRotator.js:697:15)
0|api      |     at WriteStream.emit (node:events:390:28)
0|api      |     at WriteStream.emit (node:domain:475:12)
0|api      |     at emitErrorNT (node:internal/streams/destroy:157:8)
0|api      |     at emitErrorCloseNT (node:internal/streams/destroy:122:3)
0|api      |     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
0|api      |   errno: -28,
0|api      |   code: 'ENOSPC',
0|api      |   syscall: 'write'
0|api      | }
 

 

원인은 디스크 용량 부족.
 
write가 있는거 보니 무언가를 파일에 쓰려고 했으나 실패했나보다.

 

 

 

 
 
 

디스크 용량 확인

디스크가 얼마나 꽉 차 있는지 확인해보자.

df -h
 

 

# 결과
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G   15G  3.5M 100% /
 
디스크가 100% 꽉 차 있었다.
 
남은 용량은 3.5M
 
 
 
서버는 요청이 올 때마다 요청로그, 에러로그, DB쿼리로그 등을 디스크 파일로 계속 기록한다.
 
 
서버는 요청이 올 때마다

요청 로그

에러 로그

DB 쿼리 로그

이걸 디스크 파일로 계속 기록합니다.

그래서 로그가 많으면 디스크가 금방 찹니다.

 

 

 

 

 

로그 용량 확인하기

어떤 로그가 문제인지 용량을 확인해보자.

ls -lh ~/.pm2/logs
 

 

 

여기서 로그 파일 크기를 보면 된다.

-rw-r--r-- 1 ubuntu ubuntu 8.2G api-out.log
-rw-r--r-- 1 ubuntu ubuntu 4.1G api-error.log
 

몇 GB 크기의 로그 파일이 확인된다면,
디스크 용량을 상당 부분 차지하고 있는 원인으로 의심할 수 있다.

 

 

 

 

 

로그 비우기 (삭제X)

로그 파일은 삭제보다 내용만 비우는 방식이 안전하다.

 

 

위에서 큰 용량을 차지하는 파일 내용을 비워준다.

truncate -s 0 ~/.pm2/logs/npm-start-out.log
 
truncate -s 0: 파일 크기를 0바이트로 줄인다. (파일 유지하고 내용만 비움)
 
 
 
 
 

디스크 확인

다시 디스크를 확인해보자.

df -h
 

이전:

 
# 이전
Filesystem  Size  Used Avail Use% Mounted on
/dev/root 15G 15G 3.5M 100%

# 로그 정리 후
/dev/root 15G 8G 7G 53%
 

 

 
 

서버는 정상화되었고, 로그 기록도 다시 정상 동작했다.

결론: 서버는 멀쩡했고 로그가 너무 열심히 일한 탓🤣

 

 

 

 

📋 명령어 정리

- 디스크 상태 확인

df -h
 

 

- 어떤 폴더가 용량 먹는지 확인

du -sh /*
 

 

- PM2 로그 확인

ls -lh ~/.pm2/logs
 

 

- 로그 비우기

truncate -s 0 ~/.pm2/logs/api-error.log
 

 

Total
Today
Yesterday