Perché i miei programmi di utilità della riga di comando funzionano così lentamente sul mio Mac?

5

Ho appena notato che le utilità della riga di comando come ls ( /bin/ls ), touch ( /usr/bin/touch ), cat ( /bin/cat ), ecc. sono molto lente quando le eseguo da Terminale o iTerm sul mio MacBook. Ad esempio:

  • ls 'mentre in una directory vuota impiega 1 secondo (ci vuole anche 1 secondo in una directory non vuota, entrambi con molti file o con pochi file);

  • touch 'un nuovo file impiega 1 secondo (richiede anche 1 secondo a touch un file esistente);

  • cat 'un file vuoto impiega 1 secondo (c'è anche un ritardo di 1 secondo prima che succeda qualcosa quando I cat un file non vuoto).

Ho provato a diagnosticare ciò in molti modi, ma inutilmente. Non penso che questo sia un problema di filesystem, poiché:

  • Ho eseguito Utility Disco e non segnala problemi.

  • Tutto sembra funzionare perfettamente nel Finder, ad es. i contenuti della directory sono mostrati istantaneamente nel Finder.

  • Ho installato GNU coreutils usando Homebrew e ho provato a usare gls , gtouch , gcat , ecc. e tutte le operazioni che ho elencato sopra accadono istantaneamente quando invece viene eseguita con la versione GNU.

Qualche idea su cosa potrebbe succedere? Qualche idea su come risolvere questo problema?

EDIT: quando riavvio il computer o provo con un altro utente, questi problemi scompaiono temporaneamente, ma dopo alcuni minuti sembrano riapparire di nuovo. Un'altra cosa strana che ho notato:

$ time date
Wed Jan 28 10:07:11 PST 2015

real    0m0.151s
user    0m0.001s
sys     0m0.003s

$ time date
Wed Jan 28 10:07:13 PST 2015

real    0m0.029s
user    0m0.001s
sys     0m0.002s

$ time date
Wed Jan 28 10:07:16 PST 2015

real    0m1.005s
user    0m0.001s
sys     0m0.002s

$ time date
Wed Jan 28 10:07:18 PST 2015

real    0m1.005s
user    0m0.001s
sys     0m0.002s

Questo succede per tutte le utility che ho provato, mkdir , scp , sftp , more , cat , ecc .: la prima volta che lo eseguo dopo un riavvio, è medio lento. La seconda volta che lo eseguo, è in qualche modo veloce. Tutte le volte successive lo eseguo, è lento.

    
posta Kevin H. Lin 28.01.2015 - 09:30
fonte

3 risposte

4

In realtà ho capito il problema oggi. È stato causato da un software anti-malware chiamato Sourcefire AMP (Advanced Malware Protection) . Tutti i miei problemi sono andati via dopo che l'ho disabilitato / disinstallato.

Immagino che stia facendo qualcosa di simile a mettere un ritardo su cose in /bin , /usr/bin , ecc. per "ragioni di sicurezza" ... Immagino che gli strumenti GNU non siano stati ritardati perché non sono stati nelle directory "nella lista nera".

    
risposta data 29.01.2015 - 07:27
fonte
2

La prima cosa che verificherei è che non hai qualche strano $ PATH - tempi di esecuzione di un file che non esiste e uno che dovrebbe essere veloce:

Mac:~ bmike$ time /bin/ls /private/xyz
ls: /private/xyz: No such file or directory

real    0m0.004s
user    0m0.001s
sys     0m0.002s

Mac:~ bmike$ time /bin/ls /private/tmp
com.apple.launchd.q2QmVhsPCV    com.apple.launchd.zQ5EK6R6AZ

real    0m0.006s
user    0m0.002s
sys     0m0.003s

La prossima cosa sarebbe controllare il business generale del sistema:

Mac:~ bmike$ vm_stat 5
Mach Virtual Memory Statistics: (page size of 4096 bytes)
    free   active   specul inactive throttle    wired  prgable   faults     copy    0fill reactive   purged file-backed anonymous cmprssed cmprssor  dcomprs   comprs  pageins  pageout  swapins swapouts
  306160  1168138    79266    53096        0   299239   613825 20971811   345367 15995721      237  2472732      203216   1097284   328691   190541   260034   646113   623838      285   286101   299172 
  305613  1172072    79345    53098        0   295915   618898     1191        1      680        0        0      203297   1101218   328691   190541        0        0        0        0        0        0 
  306163  1188285    79345    53088        0   279370   621180     1055        0      600        0        0      203287   1117431   328682   190541        9        0        0        0        0        0 
  306039  1186031    79345    53088        0   281598   621176      729        0      293        0        0      203287   1115177   328664   190541       18        0        0        0        0        0 
^C
Mac:~ bmike$ iostat 5
          disk0       cpu     load average
    KB/t tps  MB/s  us sy id   1m   5m   15m
   31.31  12  0.35   9  4 86  1.32 1.41 1.43
    0.00   0  0.00   2  2 96  1.21 1.38 1.42
   18.40   1  0.02   5  2 93  1.20 1.38 1.42
   22.00   1  0.02   3  2 95  1.20 1.38 1.42
^C

Quindi abbandonerei tutte le applicazioni e disconnetterò tutti gli utenti e riavvio. Se il tuo Mac ti ha fatto il login, disabilitalo nelle preferenze di sistema in modo da poter eseguire un accesso sicuro dopo il riavvio. (Tieni premuto il tasto Maiusc dopo aver premuto Invio se digiti una password per accedere al tuo utente o tieni premuto shift dopo aver selezionato l'icona utente se non hai una password.)

Ripeti le misurazioni (e, facoltativamente, cronometrando gli strumenti gnu alternativi) per sapere se il problema è temporaneo o sistematico.

    
risposta data 28.01.2015 - 10:42
fonte
1

Simile a ciò che @bmike ha detto, il tuo $ PATH potrebbe avere qualcosa in esso che fa ritardare la shell prima che trovi il comando che stai cercando di eseguire. Oltre al comando date , anche time dovrebbe essere esplicitamente denominato sulla riga di comando.

Prova /usr/bin/time /bin/date e time date un paio di volte in successione per vedere se c'è qualche differenza nell'output. Se è così, allora echo $PATH dovrebbe darti un'idea di cosa sta causando il ritardo.

    
risposta data 28.01.2015 - 23:57
fonte

Leggi altre domande sui tag