Jak zjistit, kdo pošle procesu TERM?

Tak já to tu taky zkusím. Na VPS mi běží GitLab, po několika dnech začne web vracet 502. Služba gitlab.service hlásí inactive (dead) (code=killed, signal=TERM). Podle logů to vypadá na korektní ukončení, server dostal TERM signal a ukončil se. Dá se zjistit, kdo (uživatel/proces) ten signál posílá?

  • Systémový OOM killer to není, ten v logu vidím a chodí mail.
  • Našel jsem killsnoop, ten na VPS neprojde.
  • Dá se to řešit Restart=on-failure, ale chtěl bych zjistit, co se tam stane. Taky to myslím nenastartuje služby, které jsou na gitlab navázané (gitlab-pages atp.), ale to je asi řešitelné.
  • Podezírám samotný gitlab, že narazí na nějaký limit a sám se ukončí.

NixOS 24.05, GitLab 16.5.1

V samotném ukončeném procesu, to lze vyčíst ze siginfo_t v custom signal handleru (viz sigaction(2)).
Zvenku to lze pomocí kernel tracingu (tracefs), na to ale asi VPS nemá privilegia (a tohle hádám bude dělat i ten killsnoop).
Stejně bych podezíral systemd (dle .service), tak bych zkusil tomu zvýšit verbositu a sledovat tyhle logy.

Dík za reakci, o siginfo_t jsem nevěděl, myslel jsem si, že jde zjistit jen kód signálu. Přidal jsem handler, zkusil zvýšit logování a čekám, až se to stane znovu.

(neslibuju, ale principialne se v nejblizsi dobe nebranim povoleni tracingu, nejdriv musim dodelat kernel tracking loadavg v kontejnerech, protoze ten z lxcfs trochu saje)

Přidal jsem přes FFI do pumy (ruby server) vypisování informací ze siginfo. Někdy to fungovalo, většinou spíš ne, vypsaná čísla nebyly platné hodnoty. Tuším, že ruby v signal handleru může být problematické.

systemd to nedělá, stejně se to chovalo, i když proces běžel mimo službu. Pomohlo přidat puma workery, dřív to běželo v single mode. Z nějakého důvodu ten worker skončil. V GitLabu jsem dřív viděl restarty workerů po x requestech / překročení pamětí, tak si myslím, že to někde zůstalo i pro single mód.

Možno trochu od veci ale k téme:
Ja som sa staral o gilLab dosť dlho a tiež som riešil množstvo problémov. Nakoniec som sa poobzeral po alternatíve a našiel som giTea. Git server napísaný v Go. Nasadil som ho a odvtedy všetko beží krásne a bez starostí. Ja iba aktualizujem. Vrelo odporúčam.

Na okraj k tracingu ve VPS: nejak rozumne bezpecne to povolit snadno nepujde, ale tady je videt, ze na tom nekdo dela; bude na to eventualne novy namespace, ktery teda bude muset ziskat podporu i od tech tracing userspace toolu - TLDR: nejakou chvili to jeste potrva, ale tracing bude \o/

1 Like