Tuesday, June 21, 2016

Arg - max 60






+

Miro regularmente a través de los viejos puestos aquí para ver lo que podría necesitar ponerse al día. Hoy me encontré con este que hacía referencia a un hilo a partir de 2003 en el grupo de noticias comp. unix. sco. mis. El texto original se encuentra justo por debajo y hoy he añadido más comentarios después de eso. Hice esto en un 2 GB Mac OS X utilizando golpe con urandom y desde - x: (No trate de que en un servidor o cualquier sistema multiusuario - va a llevarlo a sus rodillas) En una máquina de 4 GB, se fue sin más, lo que demuestra que no está utilizando la memoria RAM disponible. Ambas máquinas mostraron alrededor de 1 GB de espacio libre Monitor de actividad es cuando empecé a estas secuencias de comandos. En 2013, en un iMac de 12 GB, las cosas fueron aún más larga: Así que lo que limita? No es MAX_ARG: $ Getconf ARG_MAX 262144 De acuerdo con Fedora 11 Bash longitud máxima de línea ?. Bash en sí no tiene límite de longitud de la línea preestablecida. Este artículo sobre los límites de la línea de comandos del kernel dice que es ARG_MAX, pero eso no puede ser correcto. Por lo tanto, se getconf mal? Nop: /usr/include/sys/syslimits. h dice: #define ARG_MAX (256 * 1024) / * max bytes para una función exec * / Esta discusión tiene comentarios sobre los límites Exec. pero por supuesto no estamos execing nada aquí. Todo esto tiene lugar dentro de la cáscara - no ejecutivo. Por lo tanto, hasta qué punto puede durar esto, en realidad? He intentado esto: j = $ (desde - x / dev / urandom) mientras se ve en el Monitor de Actividad. Maté al proceso "desde" y trató de contar $ j - el sistema de memoria RAM se agotó y se heló. Entonces, ¿hay un límite? Al parecer, a pesar de que no es lo que la gente piensa. No se MAX_ARG y no hay más memoria RAM que se utiliza no sólo los bytes en la variable - mucho más. He modificado la secuencia de comandos para agregar un "leer ak", por lo que pude ver de memoria libre en cada bucle. El "1048576" lectura empujó hacia abajo a 500 MB. El siguiente bucle (que fue el último bucle de éxito) tiró de él la derecha abajo en un solo dígito y se necesita mucho tiempo para encontrar suficiente memoria RAM para el final. ¿Es esto debido a la recolección de basura descuidado? Podría ser, pero si lo intenta con un disparo de líneas 2097152, que chupa hacia abajo al igual que la cantidad de memoria. mucho, mucho más que la propia variable está llevando a cabo. Un recorrido de 18 MB o más variables (más de 70 MB en el iMac!) Es mucho más que cualquier script de shell es probable que necesite, pero sí muestra que no tienen por qué temer la asignación bastante grandes cantidades de datos si es necesario. ¿Tiene algo que añadir? Mándame un correo electrónico .




No comments:

Post a Comment