windows - files - tag folders
El inicio es realmente lento para todas las aplicaciones de cygwin (4)
El inicio de cualquier aplicación cygwin lleva más de un minuto en Windows 8.1 x64. No importa, o bien 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 e intentado algunas veces cygwin y cygwin64 (ver 2.864)
- Comenzó como administrador
- Intenté ejecutarlos en el modo de compatibilidad Win7
- Deshabilitado "Detectar la configuración automáticamente" para LAN como en esta respuesta
- Se agregó
127.0.0.1 localhost cygdrive wpad
a los hosts como en la misma respuesta - Establecer antivirus en estado deshabilitado
- Comprueba que la finalización de bash no esté instalada (ninguna carpeta
/etc/bash_completion.d
) - Inhabilitado todas las unidades extraíbles en el Administrador de dispositivos (solo el ssd del sistema y el disco duro de datos quedan)
- Se intentó ejecutar con la carpeta
etc/profile.d
vacía - Se intentó ejecutar con el
etc/bash.bashrc
vacío
Por favor, consejo de qué otra manera puedo encontrar la causa raíz.
PD: tengo dos sistemas diferentes, una computadora portátil y una de escritorio, ambas con Win 8.1 x64. Este problema es 100% reproducible en ambos.
Además, si comienzo a bash después de unos segundos después de iniciar sesión, se inicia de inmediato.
Esto es lo que funcionó para mí.
Inicie el terminal Cygwin y luego ejecute las siguientes dos cadenas.
mkpasswd -c > /etc/passwd mkgroup -c > /etc/group
Edite su archivo "/etc/nsswitch.conf" para que contenga las dos líneas siguientes.
passwd: files # db group: files # db
Relanzar Cygwin.
Cygwin se abre rápidamente.
Finalmente encontré las causas de este problema, pero aún no estoy seguro de por qué. Cygwin funciona muy bien para otras personas en el mismo entorno.
Causa: al inicio de cada aplicación de cygwin, intenta obtener las credenciales tal como se describe en el etc/nsswitch.conf
. Por alguna razón, toma mucho tiempo para mi cuenta, ya que contacta con varios controladores de dominio de directorio activo a través de LDAP.
Solución 1: puede guardar el usuario y grupo actuales en archivos etc/passwd
y etc/group
y establecer cygwing para verificarlos antes del directorio activo.
- Inicie
mintty.exe
y espere a que se abra - Ejecute
mkpasswd -c
y guarde su salida en eletc/passwd
(tendrá que crearlo, la salida debe ser una línea) - Ejecute
mkgroup -c
y guarde su salida en eletc/group
(tendrá que crearlo, la salida debería ser una línea) - Abra
etc/nsswitch.conf
y escriba
Contenidos de nsswitch.conf:
passwd: files # db
group: files # db
Ahora su cygwin debería comenzar inmediatamente.
Solución 2: existe una aplicación CygServer especial, que se envía con cygwin, que puede iniciarse 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 se ejecuta cygserver .
Agréguelo al inicio o inícielo antes de su sesión de cygwin y estará listo; el inicio del cygserver llevará tiempo, pero cada proceso siguiente 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. Ejecutarlo como administrador.
- Cree una nueva pestaña de captura y haga clic en Iniciar (no tiene que agregar filtros ni nada).
- Comienza
mintty
y verás sus conexiones en netmon: - Verá la lista de conexiones
mintty
en la vista de árbol a la izquierda y los 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 línea de comandos (reemplace 8.8.8.8 por uno de IP de netmon).
Profundizando: todavía estoy jugando con el etc/nsswitch.conf para obtener credenciales locales o tal vez en caché para que se ejecute más rápido sin cygserver. Pero no hay suerte todavía.
Si está en una red con un directorio AD grande mkpasswd tomará mucho tiempo (varios días en mi caso). Así que considera 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.
agregando ''C: / cygwin64 / bin'' a la ruta que funcionó para mí.