ColdFusion: рекурсия слишком глубокая;стек переполнен - PullRequest
1 голос
/ 03 сентября 2010

За последние несколько лет мы случайно видели это сообщение в выходных журналах при выполнении запланированных задач в ColdFusion:

Слишком глубокая рекурсия;стек переполнен.

Код внутри вызываемой задачи может варьироваться, но в этом случае это ОЧЕНЬ простой код, который ничего не делает, только сбрасывает счетчик в базе данных, а затем отправляет мне электронное письмо на адресскажи мне, что это было успешно.Но я видел, как это происходит со всеми видами кода, поэтому я почти уверен , что это не тот код, который вызывает эту проблему.

В нем даже есть пустой application.cfm / cfcзаблокировать любой другой вызываемый код.

Единственный раз, когда мы видим это, когда мы перезапускаем CF и пытаемся просмотреть страницу до того, как служба полностью запустится.

Ошибкаредко случается, но теперь у нас есть довольно важные запланированные задачи, которые вызывают проблемы, если они не запускаются.(Поэтому я выкладываю сюда для помощи)

Использование памяти в порядке.Задача, которая выполнялась как раз перед тем, как сообщить о более чем 80% свободной памяти.Мониторинг памяти в течение ночи не показывает никаких необычных всплесков.Машина имеет 4 гигабайта памяти и на ней больше ничего не работает, кроме ОС и CF.Недавно мы попытались переустановить CF для решения проблемы, но это не помогло.Это происходит и на нескольких других наших серверах.

Это внутренний сервер, поэтому его использование в 3 часа ночи должно отсутствовать.В это время нет других запланированных задач.

Мы видели это на наших коробках CF7, CF8 и CF9 (полностью исправлены).

Текущее полеинформация о вопросе:

  • Версия CF: 9,0,1,274733
  • Редакция: Enterprise
  • ОС: Windows 2003 Server
  • JavaВерсия: 1.6.0_17
  • Мин JVM Куча: 1024
  • Макс JVM Куча: 1024
  • Мин Пермь Размер: 64м
  • Макс Пермь Размер: 384м
  • Память сервера: 4 ГБ
  • Четырехъядерный компьютер, который редко видит использование ЦП более 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 -Doracle.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>

Если я что-то пропустил, дай мне знать. Спасибо!

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

У нас возникла эта проблема некоторое время после того, как наш сервер был обновлен до ColdFusion 9. Как представляется, исправление в этом техническом замечании от Adobe на jRun 4: http://kb2.adobe.com/cps/950/950218dc.html

Возможно, вам нужно внести некоторые изменения вразрешения, указанные в техническом примечании.

0 голосов
/ 03 сентября 2010

Вы пытались уменьшить размер кучи с 1024, чтобы сказать что-то 800. Вы говорите, что доступно более 80% памяти, поэтому, если возможно, я бы посмотрел на уменьшение макс.

Это 32 или 64 битная ОС? При назначении пространства кучи необходимо учитывать все издержки JVM (стек, библиотеки и т. Д.), Чтобы не превышать лимит ОС для процесса.

0 голосов
/ 03 сентября 2010

вы можете попробовать установить минимальный размер кучи JVM равным максимальному размеру кучи JVM (МБ) с помощью администратора CF.

Также обновите JVM до последней (21) или хотя бы до 20.

В прошлом я всегда обновлял JVM всякий раз, когда происходило что-то дурацкое, поскольку это обычно решало проблему.

...