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.
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.
- Comience
mintty.exe
y espere hasta que se abra - Ejecute
mkpasswd -c
y guarde su salida en el archivoetc/passwd
(tendrá que crearlo, la salida debe ser de una línea) - Ejecute
mkgroup -c
y guarde su salida en el archivoetc/group
(tendrá que crearlo, la salida debe ser de una línea) - 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: - 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.
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í.
-
Inicie Cygwin terminal y luego ejecute las siguientes dos cadenas.
mkpasswd -c > /etc/passwd mkgroup -c > /etc/group
-
Edite su "/etc/nsswitch.conf " archivo para contener las siguientes dos líneas.
passwd: files # db group: files # db
Relanzar Cygwin.
Cygwin se abre rápidamente.
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.
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í.
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