Depuración " Se supera el tamaño máximo de la pila de llamadas"
Tengo un servidor que puedo hacer morir con la siguiente salida:
events.js:38
EventEmitter.prototype.emit = function(type) {
^
RangeError: Maximum call stack size exceeded
Sin embargo, sin un volcado de pila o traza, no tengo forma de encontrar si esto es recursión infinita o simplemente una cadena un poco demasiado grande, y mucho menos dónde está la función problema.
Ejecutar el nodo con la opción --trace
hizo que mis pruebas no solo se ejecutaran lentamente (como era de esperar), sino que no reprodujeran el problema.
¿Alguien tiene alguna solución o consejo para llegar al fondo de esto?
3 answers
Parece que la respuesta es actualmente: esperar a Node.js para actualizar a una versión V8 más reciente, o construir la suya propia con el parche de este informe de error del proyecto Chromium.
Este hilo archivado de la lista de correo v8-dev muestra una discusión en la que
- Dave Smith trae este mismo tema y propone un parche
- Yang Guo del proyecto Chromium lo discute, presenta un error de Chromium contra el problema y aplica un fix
- Dave señala que Node (0.8 en ese momento) está usando V8 3.11 y pregunta sobre la retroimportación del parche. Yang respuestas que el parche probablemente de la tierra en V8 3.15 y no será implementada.
Observe ese nodo.js v0.8 utilizó V8 3.11; Nodo.js 0.10 está utilizando actualmente V8 3.14. Por lo tanto, el parche aceptado por Chromium para este problema sigue siendo "en el futuro" en lo que respecta a Node.
(Esta respuesta debe gracias a @ Coderoshi, ya que es siguiendo el hilo de su respuesta que aprendí todo esto.)
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
2013-03-27 16:48:38
La posibilidad de que sea una "cadena ligeramente demasiado grande" parece poco probable.
Probablemente es una función que llama al evento que se activó a sí misma.
Así que si la ralentización del código está haciendo que la recursión infinita se detenga. Mi conjetura sería que usted tiene una cola y con el modo más lento no está consiguiendo se llenó tan rápido.
Si esto no ayuda, entonces creo que necesito más información. Tal vez alguien tiene una trampa para esto.
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
2013-01-11 04:51:04
Este parche puede ayudarle a encontrar una solución. Expande la traza de la pila tremendamente:
Https://github.com/dizzyd/node/commit/40434019540ffc17e984ff0653500a3c5db87deb
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
2012-11-02 20:59:59