node js 서버가 계속 죽습니다.

KaelXP@Naver의 이미지

c9.io 에서 node js 호스팅을 하고 있습니다.
근데 하루만 지나면 서버가 죽어있습니다.

처음에는 프로그래밍 오류인가 싶어서
오류가 생길수있는 부분을 처리했는데도 다음날이면 종료가 되고

메모리초과?.. 그런 오류인지 싶어서
단시간에 수만번 통신테스트를 해봐도 문제없었습니다.
(사실 개인용이라 그런 부하가 걸릴 일도 없습니다...)

forever 이런 명령어를 이용해서 서버를 돌려도
다음날이면 종료되어있습니다.

왜 그런지 전혀 감이 안 오네요...

혹시 전혀 통신이 없으면
서버가 자동으로 종료 되는게 있나요?...

ifree의 이미지

혹시 터미널에서 돌리고, 터미널 닫으신 건 아닌지...

익명 사용자의 이미지

그러면 터미널을 계속 켜 놔야 하나요?

dist777의 이미지

...

forever, pm2, nodemon 등등의 각 솔루션별 특징이 어떠한지 정확히는 모릅니다만
대체로 사용법이라던가 기능면에 유사성이 많을겁니다.

그래도 기왕이면 forever보다는 조금 더 후대에 유명해진 pm2, nodemon같은 녀석들이 낫지 않겠나 생각이 되네요.

제가 테스트해보고, 정보를 수집해보았었던 것은 pm2, nodemon 2개인데,
대체로, 서비스를 안정적으로 유지하기 위한(쉽게 말해 "실서비스 운용")용도로는 pm2가 인기가 있는 것 같고,
nodemon은 개발진행과정에서 조금 더 편리하다는 의견이 많더군요.
(Live는 pm2, Dev는 nodemon으로 구분에서 구축하는 케이스도 많다고...)

어쨌든, 개인적인 결론은 pm2가 사용법도 좀 쉬운 느낌도 들고,
기본옵션도 나름 충실하지 않나 생각이 듭니다.
(forever는 안써봐서 잘 모르구요.
현재는 IBM산하에 있는 Strongloop은 뭔가 좀 잡다하다는 느낌이 들더군요)

pm2라는 패키지만으로 운용해도 되고, CLI기반도 나름 충실하구요
https://keymetrics.io/ 사이트 쪽 참고하셔서 계정 생성하고 설정 만져주시면
모니터링서비스와의 연동도 가능하지요. (무료판은 App 1개까지만 지원할겁니다)

암튼, pm2 같은 도구를 쓰는 이유가
터미널 세션의 상태와 상관없이 백그라운드에서 계속 문제없이 움직이도록 하는 것이
주요목적중 하나인건 분명합니다.

ifree의 이미지

간단한 테스트라면 리눅스의 screen 유틸리티를 사용하는게 간편할 겁니다.

dist777의 이미지

...

실제로 screen/tmux/byobu등을 간단한 해결방법으로 제시하는 경우도 많이 보긴 했지만
(유저가 꼭 24시간내내 Terminal Session에 접속해있지 않더라도 Terminal Session 자체를 가상공간의 어딘가에서 유지시켜두면 된다는 의미가 되겠지요)

screen등을 사용하건 단일한 터미널세션을 사용하건
이러한 방식은 Shell prompt상에서 Foreground 형태로 실행을 한다는 의미가 되겠구요
Foreground방식은 즉시 실행해보고 곧바로 Stdout을 눈으로 확인하려는 경우라면 실행/종료 과정이 오히려 단순해져서 좋을 수도 있겠습니다만,

딱히 (개발중인 경우와 같이) 자주 내리고 올릴 필요 없이 이미 대략 완성됀 Applicattion서비스를 계속 유지시키려는 상황이라면 굳이 Terminal Session에 구애받는 방식보다는
forever, pm2, nodemon등을 통해서 Terminal Session과 완전히 분리시켜 Background로 실행하는 것이 관리면에선 더 유리할겁니다.

!!! 근데...제가 Cloud 9을 사용하고 있는게 아니라 잘은 모르지만..
https://docs.c9.io/docs/run-an-application
요기 " Method 1: Use the Run panel " 항목을 보아하니
Cloud 9 자체적으로도 반드시 터미널상에서 실행하는것이 아닌, Web Interface상에서 실행하고픈 Application을 등록/조작할 수 있나보군요.
Cloud 9을 사용한다 하셨으니 기왕이면 Cloud 9 자체 기능을 활용하시는 편이 좋지 않을까요?!

세벌의 이미지

강아지 그림이 본문의 반 이상을 차지하네요.
글 주제가 강아지와는 어떤 관련 있나요?

dist777의 이미지

움..

forever도 써보셨다니...터미널을 닫아서 그런건 아닌것 같네요...
일단은...로그를 보는 것 외에는...(forever나 pm2는 Application과 별개로 자체 로그도 남기니 요런 것도 도움이 될 수도..)
모니터링 구축하는게 좋지 않겠나 싶습니다.
Node.JS라면 New Relic이나 App Dynamics (혹은, pm2를 만들었고, pm2와 연동도 되는 key metrics 라던가..) 같은놈으루 후다닥 도입해보셔도 괜찮을 것 같은데요.
(Datadog은 규모가 좀 되는 인프라스트럭쳐 가 아니고서는 크게 매력이 느껴지질 않더라는..)
..아무래도 저런 (Free tier가 존재하는) 서비스를 사용하는게 따로 인스턴스 구축할 필요가 없어서 간편하기도 하구요
나 자신이 현재 보유한 지식수준 보다도 더 상세하게 보여줄 가능성도 있으니까요.

암튼,
- 기존 로그 확인
- 로그 추가/보완 검토
- 모니터링 추가 검토
정도가 현실적이지 않을까 싶습니다.

DarkSide의 이미지

하루가 지나니 죽어 있다면, 실행 터미널을 닫아서 그랬을 가능성이 높습니다.
실제로 제가 저런 경험이 있는데,
간단한 소켓 서버를 node.js로 만들어 주었는데, 담당자가 터미널을 닫고 퇴근하면서 그 다음날 서버 죽었다고 난리를 치더라구요.(자칭 리눅스 전문가라고 함)
원인을 알고 있었지만, 인격적 모욕까지 당한터라 아무 말도 하지 않았습니다.
결국, php로 다시 만들더군요.
노드로 반나절 걸린 걸 php로 두 주 이상 걸리는 것을 목격했습니다. 하지만 실시간 서비스가 너무 느려서 결국 해당 서비스는 포기하게 되었죠.

dist777의 이미지

그렇군요..

제가 forever는 사용해보질 않아서 잘 모릅니다만
대애충 PM2랑 비슷하겠거니~ 라는 생각으로 얘기해봤습니다. 실수했네요..^^;;
(정확히는 Node.JS를 접한지 그리 오래돼지 않았고, 제가 손댈때는 이미 PM2가 대세였는지라..)
PM2라면 일단 자기가 관리하는 프로세스는 Daemon 형태로, Background에서 돌리니
Terminal Session과는 상관없이 움직이는데,
forever는 조금 다른가보군요

좀 오래됐다길래 아예 손댄 적이 없는데,
시간날때 함 봐봐야겠습니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.