Comandi Strace per la risoluzione dei problemi dei processi Linux

Quando sotto la nostra responsabilità abbiamo macchine con sistemi operativi Linux, uno dei modi più utili e pratici per gestire correttamente ogni aspetto di questi è conoscere le diverse utilità e comandi che esistono per distribuirli e supportarli.

Questa volta Solvetic parlerà di un'utilità da riga di comando chiamata strace e vedremo come può diventare pratica per l'amministrazione del sistema operativo.

Cos'è la strace?strace è un utile strumento da riga di comando per la diagnosi, l'istruzione e l'esecuzione di attività di debug. Gli amministratori di sistema trovano strace uno strumento pratico per risolvere problemi con programmi di cui non è disponibile il sorgente poiché non è necessario ricompilarli per rintracciarli.
Lo strumento strace cattura e registra tutte le chiamate di sistema effettuate da un processo e i segnali ricevuti dal processo, strace ha il compito di visualizzare il nome di ogni chiamata di sistema insieme ai suoi argomenti tra parentesi e il suo valore di ritorno all'errore standard, facoltativamente, sarà possibile reindirizzarlo su un file.

1. Installazione Strace


Per installare strace dobbiamo eseguire uno dei seguenti comandi:
 sudo apt install strace (Debian o Ubuntu) yum install strace (RedHat o CentOS) dnf install strace (Fedora)
Nel caso in cui un programma vada in crash o si comporti in modo imprevisto, sarà possibile accedere alle chiamate di sistema per avere un'idea di cosa sia successo esattamente durante la sua esecuzione.

Le chiamate di sistema possono essere classificate in diversi eventi: quelli relativi alla gestione dei processi, quelli che prendono un file come argomento, quelli che coinvolgono le reti, l'allocazione della memoria, i segnali, l'IPC e anche le chiamate di sistema relative ai descrittori di file.

2. Come risolvere i problemi di processo in Linux con i comandi strace


Successivamente vedremo diversi comandi strace per risolvere i diversi problemi di processo che possono sorgere in Linux.

Traccia le chiamate di sistema con straceQuesta opzione ci consente di tenere traccia di tutte le chiamate di sistema effettuate dal comando df, per questo eseguiamo quanto segue:

 strace df -h

In questo output possiamo vedere vari tipi di chiamate di sistema effettuate dal comando df, ad esempio, una di queste è:

 open ("/ etc / ld.so.cache", O_RDONLY | O_CLOEXEC) = 3
In cui si:
  • Aperta: è il tipo di chiamata di sistema
  • È l'argomento della chiamata di sistema: "/etc/ld.so.cache", O_RDONLY | O_CLOEXEC
  • 3: è il valore di ritorno della chiamata di sistema

Traccia i processi PID di LinuxSe un processo è già in esecuzione sul sistema, sarà possibile rintracciarlo tramite il suo PID come segue:

 sudo strace -c -p 465
Questo riempirà lo schermo con l'output continuo che mostra che le chiamate di sistema vengono effettuate dal processo, per finire, premeremo i tasti Ctrl + C.

Ottieni il riepilogo di un processo LinuxUtilizzando il parametro -c sarà possibile generare un report di tempo totale, chiamate ed errori per ogni chiamata di sistema, per questo eseguiremo la seguente sintassi:

 sudo strace -c -p (PID)

Stampa il puntatore dell'istruzione durante la chiamata di sistema. L'opzione -i visualizza il puntatore dell'istruzione al momento di ogni chiamata di sistema effettuata dal programma.

 sudo strace -i df -h

Mostra l'ora del giorno per ogni riga di output della tracciaCon strace è possibile stampare l'ora del giorno per ogni riga nell'output del trace, utilizzando il flag -t:

 sudo strace -t df -h

Visualizza il tempo di stampa impiegato per le chiamate di sistemaPer mostrare la differenza di tempo tra l'inizio e la fine di ogni chiamata di sistema effettuata da un programma, dobbiamo usare l'opzione -T:

 sudo strace -T df -h

Traccia chiamate specificheIl comando trace = write è noto come espressione qualificata, dove trace è un qualificatore (altri includono signal, abbreviation, verbose, raw, read o write).In questo caso, si digita il valore del qualificatore. Il seguente comando visualizza in tempo reale le chiamate di sistema per stampare l'output df sullo standard output:

 sudo strace -e trace = scrivi df -h

Alcuni comandi aggiuntivi che possiamo usare sono:

 sudo strace -e trace = apri, chiudi df -hsudo strace -e trace = apri, chiudi, leggi, scrivi df -hsudo strace -e trace = all df -h

Traccia le chiamate di sistema in base a una condizioneQuesto comando può essere utilizzato per tracciare tutte le chiamate di sistema che coinvolgono la gestione dei processi, eseguiremo quanto segue:

 sudo strace -q -e trace = processo df -h

Ora, per tracciare tutte le chiamate di sistema che accettano un nome di file come argomento, eseguiremo il seguente comando:

 sudo strace -q -e trace = file df -h

Per tracciare tutte le chiamate di sistema che comportano l'allocazione di memoria, eseguiremo la seguente riga:

 sudo strace -q -e trace = memoria df -h

Reindirizza la traccia al file di outputSe vogliamo scrivere i messaggi di follow-up inviati a un errore standard in un file, useremo l'opzione -o. Ciò significa che solo l'output del comando viene stampato sullo schermo come segue:

 sudo strace -o df_debug.txt df -h

Possiamo visualizzare questo file eseguendo la riga:

 gatto df_debug.txt

Distribuire l'output di debug di straceSe vogliamo visualizzare le informazioni di debug per lo strumento strace, dobbiamo usare il flag -d:

 strace -d df -h

Strace aiutoPer visualizzare l'aiuto del comando strace eseguiremo la seguente riga:

 uomo strace

Ecco come abbiamo visto come strace diventa un ulteriore aiuto per le attività di gestione nelle distribuzioni Linux.

wave wave wave wave wave