ColdFusion: рекурсия слишком глубокая; стек переполнен
-
30-09-2019 - |
Вопрос
В течение последних нескольких лет мы случайно увидели это сообщение в выходных журналах при запуске запланированных задач в ColdFusion:
Рекурсия слишком глубокая; стек переполнен.
Код внутри задачи, который называется, может варьироваться, но в этом случае это очень простой код, который ничего не делает, кроме как сброс счетчика в базе данных, а затем отправьте мне электронное письмо, чтобы сказать мне, что это было успешно. Но я видел, что это произошло со всеми видами кода, поэтому я достаточно уверен Это не код, который вызывает эту проблему.
Он даже имеет пустую Application.cfm / CFC, чтобы заблокировать любой другой код, называемый.
Единственное другое время, которое мы видим, это когда мы перезапускаем CF, и мы пытаемся просмотреть страницу до полного начала службы.
Ошибка редко бывает, но теперь у нас есть несколько довольно важных запланированных задач, которые вызывают проблемы, если они не запускаются. (Следовательно, я размещаю здесь для помощи)
Использование памяти в порядке. Задача, которая работала как раз перед ней более 80% свободной памяти. Мониторинг памяти через ночь не показывает никаких необычных шипов. Машина имеет 4 концерта памяти, и на нем ничего не работает, кроме ОС и ср. Недавно мы пытались переустановить CF, чтобы решить проблему, но это не помогло. Это происходит на нескольких других других серверах.
Это внутренний сервер, поэтому использование в 3 утра должно быть несуществующим. В то время нет других запланированных задач.
Мы видим это на наших коробках CF7, CF8 и CF9 (полностью исправлено).
Текущее поле в вопросе Информация:
- CF версия: 9,0,1,274733
- Издание: Предприятие
- OS: Windows 2003 Server
- Java версия: 1.6.0_17
- Мин JVM Heap: 1024
- Макс JVM Heap: 1024
- Мин Пермский Размер: 64 м
- Макс Пермский Размер: 384 м
- Память сервера: 4 ГБ
- Quad Core Machine, которая редко видит более 5% использования ЦП
Настройки JVM:
-server -dsun.io.usecanoncaches = false -xx: permsize = 64m -xx: maxpermsize = 384m -xx: + useparallelgc -xx: + AggressiveHeap -dcoldfusion.rootdir = {application.home} /../ -dcoldfusion.libpath = {application.home} /../ lib-ustoracle.jdbc.v8compatible = true
Вот невероятный комплексный код, который не удалось пройти прошлой ночью, но проводится в течение многих лет, и, скорее всего, будет работать завтра:
<cfquery datasource="common_app">
update import_counters
set current_count = 0
</cfquery>
<cfmail subject="Counters reset" to="my@email.com" from="my@email.com"></cfmail>
Если я пропустил что-нибудь, дайте мне знать. Спасибо!
Решение
У нас был этот вопрос некоторое время после того, как наш сервер был обновлен до ColdFusion 9. Исправление, кажется, в этой технике от Adobe на Jrun 4: http://kb2.adobe.com/cps/950/950218dc.html.
Вам, вероятно, нужно сделать некоторые корректировки до разрешений, как отмечено в технике.
Другие советы
Вы пытались уменьшить размер вашей кучи от 1024, чтобы сказать 800 что-то. Вы говорите, что есть более 80% оставленных на память, поэтому, если возможно, я бы посмотрел на уменьшение максимума.
Это 32 или 64 бита ОС? При назначении пространства кучи необходимо учитывать все накладные расходы JVM (стек, библиотеки и т. Д.), Чтобы вы не переходите на ограничение ОС для процесса.
То, что вы можете попробовать, это установить минимальный размер кучи JVM для того же, что и ваш максимальный размер кучи JVM (MB) в вашем администратере CF.
Также обновите JVM до последнего (21) или не менее 20.
В прошлом я всегда модернизировал JVM всякий раз, когда что-то путачи начало происходить так, как это обычно решило проблему.