¿Por qué mis utilidades de línea de comandos se ejecutan tan lentamente en mi Mac?

5

Acabo de darme cuenta de que las utilidades de línea de comandos como ls ( /bin/ls ), touch ( /usr/bin/touch ), cat ( /bin/cat ), etc. son muy lentas cuando las ejecuto desde Terminal o iTerm en mi MacBook. Por ejemplo:

  • ls 'ing mientras está en un directorio vacío toma 1 segundo (también toma 1 segundo en un directorio no vacío, ambos con muchos archivos o con algunos archivos);

  • touch 'ing un nuevo archivo toma 1 segundo (también toma 1 segundo para touch un archivo existente);

  • cat 'ing un archivo vacío toma 1 segundo (también hay un retraso de 1 segundo antes de que ocurra algo cuando I cat un archivo no vacío).

He intentado diagnosticar esto de muchas maneras pero sin éxito. No creo que esto sea un problema del sistema de archivos, ya que:

  • He ejecutado la Utilidad de Disco y no informa problemas.

  • Parece que todo funciona bien en Finder, por ejemplo. el contenido del directorio se muestra instantáneamente en el Finder.

  • Instalé GNU coreutils usando Homebrew e intenté usar gls , gtouch , gcat , etc., y todas las operaciones que enumeré anteriormente suceden instantáneamente cuando se ejecuta con la versión GNU en su lugar.

¿Alguna idea sobre lo que podría estar pasando? ¿Alguna idea sobre cómo solucionar esto?

EDITAR: Cuando reinicio la computadora o intento con un usuario diferente, estos problemas desaparecen temporalmente, pero luego de unos minutos parecen volver a aparecer. Otra cosa extraña que noté:

$ 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

Esto sucede para todas las utilidades que he probado, mkdir , scp , sftp , more , cat , etc .: La primera vez que lo ejecuto después de un reinicio, es medio lento. La segunda vez que lo ejecuto, es algo rápido. Todas las veces que lo corro, es lento.

    
pregunta Kevin H. Lin 28.01.2015 - 09:30

3 respuestas

4

En realidad me di cuenta del problema hoy. Fue causado por una pieza de software antimalware llamado Sourcefire AMP (Protección contra malware avanzado) . Todos mis problemas desaparecieron después de que lo deshabilité / desinstalé.

Supongo que estaba haciendo algo como poner un retraso en las cosas en /bin , /usr/bin , etc. por "razones de seguridad" ... Supongo que las herramientas GNU no se retrasaron porque no estaban en los directorios de "lista negra".

    
respondido por el Kevin H. Lin 29.01.2015 - 07:27
2

Lo primero que verificaría es que no tienes algunos $ PATH impares: ejecuta los intervalos de tiempo de un archivo que no existe y que debería ser rápido:

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

Lo siguiente sería verificar el negocio general 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

Luego saldría de todas las aplicaciones y desconectaría a todos los usuarios y reiniciaría. Si ha iniciado sesión en su Mac, desactívela en las preferencias del sistema para que pueda realizar un inicio de sesión seguro después del reinicio. (Mantenga presionada la tecla Mayús inmediatamente después de presionar regresar si ingresa una contraseña para iniciar sesión en su usuario o mantenga presionada la tecla Mayús después de seleccionar su ícono de usuario si no tiene una contraseña).

Repita las mediciones (y, opcionalmente, cronometrando las herramientas gnu alternativas) para saber si el problema es temporal o sistemático.

    
respondido por el bmike 28.01.2015 - 10:42
1

Similar a lo que dijo @bmike, su $ PATH podría tener algo dentro que haga que el shell se retrase antes de encontrar el comando que está intentando ejecutar. Además del comando date , time también debe tener un nombre explícito en la línea de comandos.

Pruebe /usr/bin/time /bin/date y time date varias veces seguidas para ver si hay alguna diferencia en la salida. Si es así, entonces echo $PATH debería darle una pista de lo que está causando el retraso.

    
respondido por el Kent 28.01.2015 - 23:57

Lea otras preguntas en las etiquetas