El inicio es muy lento para todas las aplicaciones de cygwin


El inicio de cualquier aplicación cygwin toma más de un minuto en Windows 8.1 x64. No importa, o estoy comenzando mintty desde el acceso directo o cygwin.bat o ls.exe o bash.exe desde la carpeta bin. Cada uno de ellos será lento.

Después de bash o mintty comenzaron a trabajar bastante rápido:

$ time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
Hello

real    0m1.273s
user    0m0.060s
sys     0m1.181s

Pasos, que he intentado:

  • Reinstalado y probado tanto cygwin y cygwin64 pocas veces (ver. 2.864)
  • Comenzó como Administrador
  • Intentó correr en modo de compatibilidad Win7
  • Desactivado "Detectar automáticamente la configuración" para LAN como en esta respuesta
  • Añadido 127.0.0.1 localhost cygdrive wpad a los hosts como en la misma respuesta
  • Establecer antivirus en estado deshabilitado
  • Se ha comprobado que la finalización de bash no está instalada (no hay carpeta /etc/bash_completion.d)
  • Desactivado todas las unidades extraíbles en el Administrador de dispositivos (solo quedan ssd del sistema y hdd de datos)
  • Intentó correr con la carpeta vacía etc/profile.d
  • Intentó ejecutar con vacío etc/bash.bashrc file

Por favor, consejo de cómo más puedo encontrar la causa raíz.

P.d. - Tengo dos sistemas diferentes, portátil y de escritorio, ambos con Win 8.1 x64. Esta emisión es 100% reproducible en ambos.

Además, si inicio bash después de unos segundos después de iniciar sesión, comienza inmediatamente.

Author: Community, 2015-02-09

4 answers

Finalmente encontré lo que causa este problema, pero todavía no estoy seguro de por qué. Cygwin trabaja para otras personas en el mismo entorno muy bien.

Causa: Al inicio de cada aplicación cygwin intenta obtener credenciales como se describe en el archivo etc/nsswitch.conf. Por alguna razón, toma mucho tiempo para mi cuenta, ya que se pone en contacto con varios controladores de dominio de Active directory a través de LDAP.

Solución 1: Puede guardar el usuario y el grupo actuales en etc/passwd y etc/group archivos y configurar cygwing para comprobarlos antes de active directory.

  1. Comience mintty.exe y espere hasta que se abra
  2. Ejecute mkpasswd -c y guarde su salida en el archivo etc/passwd (tendrá que crearlo, la salida debe ser de una línea)
  3. Ejecute mkgroup -c y guarde su salida en el archivo etc/group (tendrá que crearlo, la salida debe ser de una línea)
  4. Abrir etc/nsswitch.conf y escribir

Nsswitch.contenido de conf:

passwd: files # db
group:  files # db

Ahora su cygwin debe comenzar immidiatelly.

Solución 2: Existe una aplicación especial CygServer, enviada con cygwin, que se puede iniciar como servicio NT o como proceso simple (simplemente ejecute usr/sbin/cygserver.exe). Almacena en caché las credenciales y las propaga a cada siguiente proceso de cygwin mientras cygserver ejecuta.

Agréguelo al inicio o arráncelo antes de su sesión de cygwin y estará bien: el inicio de cygserver tomará tiempo, pero cada siguiente proceso de cygwin comenzará inmediatamente.

¿Es tu caso? Quiero compartir mis pasos de investigación, para que pueda verificar si su caso es el mismo que el mío.

  • Instale MS Network Monitor ya que es capaz de mostrar el tráfico de un proceso específico. Ejecútalo como administrador.
  • Crea Nueva pestaña de capturay haz clic en Inicio (no tienes que agregar ningún filtro ni nada).
  • Start mintty y verás sus conexiones en netmon: netmon-captura de pantalla
  • Verás lista de conexiones mintty en la vista de árbol a la izquierda y marcos TCP y LDAP a la derecha después de seleccionar una de esas conexiones.
  • Además, puede obtener el nombre de esas máquinas remotas por IP. Ejecute nbtstat -a 8.8.8.8 en la línea de comandos (reemplace 8.8.8.8 por una de las IP de netmon).

Yendo más profundo: Todavía estoy jugando con etc/nsswitch.conf archivo para obtener credenciales locales o tal vez en caché para que se ejecute más rápido sin cygserver. Pero aún no ha habido suerte.

 57
Author: Anton Purin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 22:10:17

Esto es lo que funcionó para mí.

  1. Inicie Cygwin terminal y luego ejecute las siguientes dos cadenas.

    mkpasswd -c > /etc/passwd
    mkgroup -c > /etc/group
    
  2. Edite su "/etc/nsswitch.conf " archivo para contener las siguientes dos líneas.

    passwd:   files # db
    group:    files # db
    
  3. Relanzar Cygwin.

Cygwin se abre rápidamente.

 20
Author: Whifix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-03 18:15:28

Si está en una red con un directorio de anuncios grande, mkpasswd tomará mucho tiempo (varios días en mi caso). Así que considere usar:

mkpasswd -c -l > /etc/passwd
mkgroup -c -l > /etc/group

 -l,--local [machine]    Print local user accounts of \"machine\",
                         from local machine if no machine specified.
                         Automatically adding machine prefix for local
                         machine depends on settings in /etc/nsswitch.conf.
 6
Author: marius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-02 09:08:22

Añadiendo "C:\cygwin64\bin" para el camino funcionó para mí.

 2
Author: Aaron Carlton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-28 19:29:40