C'è un modo per ottenere "top" per eseguire esattamente una volta ed uscire?


13

Trovo che l'output del comando shell topsia un modo semplice e familiare per avere un'idea approssimativa della salute di una macchina. Vorrei servire topl'output (o qualcosa di molto simile ad esso) da un minuscolo web server su una macchina per scopi di monitoraggio rozzo.

C'è un modo per ottenere il massimo per scrivere l'output testuale esattamente una volta , senza formattare i caratteri? Ho provato questo:

(sleep 1; echo 'q') | top > output.txt

Questo sembra essere vicino a quello che voglio, tranne per il fatto che (1) non c'è garanzia che non otterrò più o meno di una schermata di informazioni e (2) devo eliminare tutti i caratteri di formattazione del terminale.

Oppure c'è qualche altro topcomando simile che elenca sia la memoria a livello di macchina che a livello di processo / utilizzo della CPU / informazioni sull'uptime?

(Idealmente, mi piacerebbe una strategia portatile sia per Linux che per Mac OS X, dal momento che i nostri sviluppatori usano i Mac e il nostro ambiente di produzione è Linux.)

Risposte:


22

In Linux, puoi provare questo:

top -bn1 > output.txt

Da man top:

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

Con OS X, prova:

top -l 1

Dalla manpage superiore di OSX :

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.

Sembra esattamente la risposta che avrei cercato se topsu OS X fosse supportato il flag -b. :-( Purtroppo, non lo è, e non vedo una versione di topdisponibile tramite homebrew. Questa sembra esattamente la risposta giusta per Linux, comunque.
Mickalot,

@Mickalot: vedi il mio aggiornamento. Puoi installare GNU top in Mac OSX?
cuonglm,

@Gnuoc: /usr/bin/top -l 1su OSX 10.9.4 è perfetto ... grazie! Per quanto riguarda l'installazione di GNU top, potrei installarlo sul mio computer, ma dovrei convincere gli altri sviluppatori a installarlo sui loro computer affinché il mio codice funzioni per loro, quindi preferirei evitarlo. (Se non è disponibile tramite homebrew, ci sarà resistenza.) Ora che cambierò in base alla piattaforma, sarò avido ... Sei a conoscenza di qualsiasi semi-equivalente di Windows, quindi quegli sviluppatori (abbiamo alcuni) può anche avere una pagina di stato grezzo? (Se no, va bene, la tua risposta è già super utile!)
Mickalot,

@Mickalot: ricorda la nota dalla manpage superiore di OSX, nota che il primo campione visualizzato avrà una% CPU non valida visualizzata per ogni processo, poiché viene calcolata usando il delta tra i campioni. . Con gli utenti Windows, forse puoi usare `` cygwin`
cuonglm il

@Gnuoc Grazie per il punto in più. Suppongo di poter fare top -l 2e buttare via la prima pagina di campioni?
Mickalot,

1

Per ottenere numeri di tipo simili da un sistema Windows, ti consigliamo di dare un'occhiata a PowerShell.

Solo per ottenere un elenco di processi e guardare get-process. Dai un'occhiata a questo riferimento .

Nel fare ulteriori ricerche, ho trovato un piccolo comando qui .

Che se togli il ciclo while presentato, per le tue esigenze sarebbe:

ps | sort -desc cpu | select -first 30

psin powershell è un alias per get-process.


Sembra un'ottima idea! Prenderò uno dei miei colleghi con Windows per provarlo ...
Mickalot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.