podman 컨테이너가 자꾸 강제 종료되길래 컨테이너를 재가동하고 로그를 찍어봤다.
1 2 3 4 5 6 7 8
| podman start [컨테이너 명]
podman ps
podman log [컨테이너 명]
|
콘솔 확인 결과, 아래의 스택오버플로우 포스트처럼 pm2에서 코드 0 으로 종료된다는 문구가 출력됐다.
https://stackoverflow.com/questions/58947629/node-js-pm2-log-app-server0-exited-with-code-0-via-signal-sigkill
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| [RSS]Time 60min Call Complete. RSS Timer::60 call complete. { generation_event: 'sitemap', origin_commander: 'timer', is_timer: 30 } [Sitemap]Time 30min Call Complete. Sitemap Timer::30 call complete. 2023-05-18T05:59:41: PM2 log: App name:app id:0 disconnected 2023-05-18T05:59:41: PM2 log: App [app:0] exited with code [0] via signal [SIGTERM] 2023-05-18T05:59:41: PM2 error: Error caught while calling pidusage 2023-05-18T05:59:41: PM2 error: Error: ESRCH: no such process, read 2023-05-18T05:59:41: PM2 error: Error caught while calling pidusage 2023-05-18T05:59:41: PM2 error: Error: ESRCH: no such process, read 2023-05-18T05:59:41: PM2 error: 0 : id unknown 2023-05-18T05:59:41: PM2 error: Trace: Error: 0 : id unknown at God.logAndGenerateError (/usr/local/lib/node_modules/pm2/lib/God/Methods.js:39:12) at God.stopProcessId (/usr/local/lib/node_modules/pm2/lib/God/ActionMethods.js:289:21) at God.deleteProcessId (/usr/local/lib/node_modules/pm2/lib/God/ActionMethods.js:366:9) at Server.onmessage (/usr/local/lib/node_modules/pm2/node_modules/pm2-axon-rpc/lib/server.js:104:6) at RepSocket.emit (node:events:513:28) at RepSocket.emit (node:domain:489:12) at Parser.<anonymous> (/usr/local/lib/node_modules/pm2/node_modules/pm2-axon/lib/sockets/rep.js:51:15) at Parser.emit (node:events:513:28) at Parser.emit (node:domain:489:12) at Parser._write (/usr/local/lib/node_modules/pm2/node_modules/amp/lib/stream.js:91:16) at God.logAndGenerateError (/usr/local/lib/node_modules/pm2/lib/God/Methods.js:34:15) at /usr/local/lib/node_modules/pm2/lib/God/ActionMethods.js:367:30 at God.stopProcessId (/usr/local/lib/node_modules/pm2/lib/God/ActionMethods.js:289:14) at God.deleteProcessId (/usr/local/lib/node_modules/pm2/lib/God/ActionMethods.js:366:9) at Server.onmessage (/usr/local/lib/node_modules/pm2/node_modules/pm2-axon-rpc/lib/server.js:104:6) at RepSocket.emit (node:events:513:28) at RepSocket.emit (node:domain:489:12) at Parser.<anonymous> (/usr/local/lib/node_modules/pm2/node_modules/pm2-axon/lib/sockets/rep.js:51:15) at Parser.emit (node:events:513:28) at Parser.emit (node:domain:489:12) 2023-05-18T05:59:41: PM2 log: PM2 successfully stopped
|
컨테이너 위에서 돌아가고 있는 프로그램은 Express API 서버였고, 스케쥴러처럼 특정 시간대에 트리거를 하는 로직을 수행하고 있었다.
동일한 작동 방식으로 짜인 다른 컨테이너도 해당 오류가 일어나지 않았는데 왜 이 컨테이너만 이런 문제가 일어났을까?
컨테이너의 Express 서버는 AWS의 Lambda를 호출하고 있었는데, 이 Lambda는 파일 생성이라는 다소 무거운 작업을 수행한다.
- axios 요청에서 타임아웃을 내지 않더라도, 요청 시간이 너무 길어지면 프로세스가 죽은 것임으로 간주하고 pm2가 강제 종료를 수행한다.
해당 내역때문에 lamdba의 헤비한 로직을 비동기로 처리하고, 응답을 먼저 돌려주는 방식으로 바꾸었다.