Información básica: buscaba ejecutar un script en un servidor de Red Hat para leer algunos datos de/dev/random y usar el comando Perl unpack() para convertirlo en una cadena hexadecimal para su uso posterior (benchmarking operaciones de base de datos) Ejecuté algunos "head -1" en/dev/random y parecía estar funcionando bien, pero después de llamarlo un par de veces, simplemente colgaba. Después de unos minutos, finalmente emitiría un pequeño bloque de texto, luego terminaría./dev/random Extremadamente lento?
Cambié a/dev/urandom (realmente no quería, es más lento y no necesito esa calidad de aleatoriedad) y funcionó bien para las dos o tres primeras llamadas, entonces también comenzó a colgar . Me preguntaba si era el comando de "cabeza" el que estaba bombardeándolo, así que intenté hacer algunas E/S simples usando Perl, y también estaba colgando. Como último esfuerzo, utilicé el comando "dd" para descargar información directamente a un archivo en lugar de a la terminal. Todo lo que pedí fue 1mb de datos, pero tardé 3 minutos en obtener ~ 400 bytes antes de matarlo.
Revisé las listas de procesos, la CPU y la memoria prácticamente no se modificaron. ¿Qué podría hacer exactamente/dev/random así y qué puedo hacer para prevenirlo/arreglarlo en el futuro?
Edit: Gracias por la ayuda chicos! Parece que tuve mezclado aleatorio y urandom. Tengo el script en funcionamiento ahora. Parece que aprendí algo nuevo hoy. :)
Parece que tienes los 2 dispositivos de mezclado; en un sistema Linux,/dev/random es el dispositivo aleatorio de bloqueo de alta calidad. Se "colgará" cuando no haya más entropía recolectada disponible para generar números aleatorios de alta calidad./dev/urandom debe ser no bloqueante y pseudoaleatorio. – geoffspear
Con respecto a '/ dev/random', consulte [wiki] (http://en.wikipedia.org/wiki//dev/random):" Cuando el grupo de entropía está vacío, las lecturas de/dev/random se bloquearán hasta que se recolecta ruido ambiental ". '/ dev/urandom' debería ser no bloqueante, ¿está seguro de haberlo usado? – delnan
como un lado, ejecutaste 'cabeza -1', esto tendrá el efecto de leer una línea, es decir. lea hasta que encuentre una nueva línea. si intenta leer una pequeña cantidad de datos, probablemente debería usar 'dd' en su lugar. – Hasturkun