Programul C++ se blochează cu EXIT CODE: 9 (SIGKILL) (Programare, C++, Gestionarea Erorilor)

syko a intrebat.
a intrebat.

Programul meu de aplicație se blochează cu EXIT CODE: 9 (SIGKILL)

Nu am rulat niciodată o comandă precum „kill -9 (pid)” sau „pkill (nume proces)” care poate ucide procesul în curs de execuție.

De unde ar trebui să încep pentru depanare în acest caz?

  1. Am încercat să descarc urma de stivă atunci când programul se blochează, dar am constatat că SIGKILL nu poate fi prins pentru tratarea erorilor.

  2. Programul utilizează MPI și rulează în medii cluster. Acesta moare după aproximativ 1 oră de funcționare.

Există vreo cauză COMUNĂ care poate genera excepția SIGKILL?

(Rulează pe linux; cent os 7)

Comentarii

  • Puteți posta o urmă de stivă? –  > Por Adam Hunyadi.
  • strace yourprogram de la un prompt shell. Acest lucru va produce un imensă volum de ieșire; ignorați toate liniile, cu excepția ultimelor 50 sau cam așa ceva. Dacă nu aveți nicio idee despre semnificația rezultatului, postați aici ultimele 50 de linii, nemodificat. (Nu vor încăpea în comentarii. Folosiți linkul „edit” de sub etichete pentru a edita textul întrebării dvs.). –  > Por zwol.
  • Rulați programul într-un debugger pentru a prinde semnalul. –  > Por Un tip programator.
  • După cum menționează Mathieu Van Nevel, încercați valgring 'yourprogram' dacă este disponibil. Aveți controlul asupra rețelei în care rulați sau ar putea exista o curățare automată pentru rulări suspendate (adică dacă cineva vă ucide)? –  > Por kabanus.
  • @syko: este o posibilitate, deoarece OOM trimite un SIGKILL vezi acest răspuns. Acest răspuns sugerează că puteți verifica jurnalele pentru a vedea dacă acesta este cazul. –  > Por stefaanv.
1 răspunsuri
syko

@ Răspund la propria întrebare pentru ca cineva să poată primi ajutoare mai târziu.

Excepția a fost cauzată de OutOfMemory.

Procesul alocă prea multă memorie punând presiuni asupra sistemului de operare. Sistemul de operare are un asasin, oom-killer, , care ucide astfel de procese de dragul stabilității sistemului. Oom-killer folosește gloanțe numite SIGKILL.

Cu toate acestea, deoarece SIGKILL este invizibil (nu poate fi prins și gestionat de aplicație), pentru unii începători, inclusiv pentru mine, nu este întotdeauna ușor să ne dăm seama de adevăratul motiv al blocării.

O veste bună este că, atunci când asasinul vă ucide procesul, acesta înregistrează întotdeauna acțiunea sa în /var/log/messages.

În funcție de configurația sistemului dumneavoastră de operare, oom-killer ar putea să nu înregistreze niciun mesaj. Într-un astfel de caz, îl puteți configura și dumneavoastră. Căutați configurația rsyslog în google.

Găsirea procesului care a fost ucis de către Linux OOM killer