erlang에거 CrashDump는 매우 중요한 역할을 합니다. 지금 어떠한 프로세스가 많인 메모리를 차지하는지, 메일박스는 얼마나 차있는지, Actor구조는 어떻게 되어 있는지, 매우 중요한 요소중에 하나가 됩니다. 그러나, Crash Dump는 erlang VM이 Crash가 되었을 때 나타는 거라, 불편하기도 합니다. 그런데 이번에 회사 선배님께 알게된 좋은 팁이 있어서 공유 합니다.
kill
보통 "kill -9 {PID}"로 프로그램을 강제 종료할 때 쓰는 Linux에서 kill은 프로그램에 signal을 날려주는 역할을 합니다. 여기에 User Signal이 있는데, 만약 프로그램이 User Signal을 정의 해 두었으면 그것에 대한 콜백을 받아 동작합니다. 여기서 erlang은 User Signal 1을 전달하면 erlang은 프로그램의 CrashDump를 추출합니다.
사용법은 다음과 같습니다.
$ kill -s SIGUSR1 {erlang 프로그램 PID}
그렇게 되면 erl_crash_{dump 시간}.dump 형태의 CrashDump파일이 나타나게 됩니다.
CrashDump Viewer
erlang은 자체적으로 GUI 형식의 CrashDump Viewer를 갖고 있습니다. 이것은 erlang shell에서 호출할 수 있습니다.
$ erl
1> crashdump_viewer:start().
crash dump viewer를 호출하고, 방금 뽑아낸 dump를 선택하면 다음과 같이 dump viewer가 나타납니다.
위의 Slogan에서 볼 수 있듯, SIGUSR1을 받아서 Crash Dump를 뽑아냈다는 것을 알 수 있습니다.
더욱 자세한 내용은 http://erlang.org/erldoc 에서 보실 수 있습니다.
주의 : 일부 erlang 프로그램에서는 SIGUSR1을 보낼 경우, socket과 같은 것들이 끊어질 수 있습니다.
'00. Functional Programming > erlang' 카테고리의 다른 글
erlang Garbage collection (0) | 2016.05.22 |
---|---|
erlang io:format과 같은 String Format (0) | 2016.04.04 |
erlang에서 _Var와 Var의 차이 (0) | 2016.04.04 |