Czy jest jakiś sposób, aby sprawdzić, który z moich procesów zabił jądro? Czasami loguję się na mój serwer i stwierdzam, że coś, co powinno działać całą noc, zatrzymało się po 8 godzinach i nie jestem pewien, czy działają aplikacje, czy jądra.
Jeśli jądro zabije proces (ponieważ w systemie zabrakło pamięci), pojawi się komunikat dziennika jądra. Zaewidencjonuj /var/log/kern.log
(w Debianie / Ubuntu inne dystrybucje mogą wysyłać dzienniki jądra do innego pliku, ale zwykle /var/log
pod Linuksem).
Zauważ, że jeśli OOM-killer (out-of-memory killer) został uruchomiony, oznacza to, że nie masz wystarczającej ilości pamięci wirtualnej. Dodaj więcej wymiany (lub więcej pamięci RAM).
Niektóre awarie procesu są również rejestrowane w dziennikach jądra (np. Błędy segmentacji).
Jeśli procesy zostały uruchomione z crona, powinieneś mieć wiadomość z komunikatami o błędach. Jeśli procesy zostały uruchomione z powłoki w terminalu, sprawdź błędy w tym terminalu. Uruchom proces, screen
aby rano zobaczyć terminal. Może to nie pomóc, jeśli OOM-killer się uruchomi, ponieważ mógł zabić również proces cron lub screen; ale jeśli natknąłeś się na zabójcę OOM, to musisz rozwiązać ten problem.
/var/log/kern.log
?Rachunkowość procesów może tutaj pomóc.
W skrócie:
Następnie wypróbuj polecenia takie jak:
lub na Ubuntu:
Widzieć:
AKTUALIZACJA
Co dziwne,
pacct
plik zawiera informacje o statusie wyjścia, ale anilastcomm
niesa
wydaje się, aby go wydrukować.O ile widzę, musisz napisać własny program C, aby uzyskać dostęp do informacji.
AKTUALIZACJA 2
Oto wersja, która drukuje kod wyjścia.
Ostatnie dwa pola to „S” dla sygnalizacji i „E” dla wyjścia, a następnie numer sygnału lub status wyjścia.
Więc w twoim przypadku prawdopodobnie szukasz „S 15”, co oznacza, że ma SIGTERM.
W porównaniu do „E 0”, co oznacza, że proces zakończył się bez błędu.
Tylko minimalnie przetestowane.
źródło
To polecenie powie Ci, jakie usługi są obecnie uruchomione, a które nie zostały uruchomione ani zatrzymane.
źródło