У меня есть CF10, работающий на Dev-Box, Windows 7, 64 бит. Периодически, каждую минуту или около того, использование ЦП для CF10 будет увеличиваться до 100% в течение приблизительно 20 секунд и возвращаться вниз. Это довольно регулярно.Потоки планировщика ColdFusion, использующие CPU
Мне было трудно диагностировать эту проблему. Я видел разговоры о чистках клиентских переменных, протоколировании, мониторинге и всех вещах, но я отключил все это безрезультатно.
С VisualVM мне удалось отследить проблему до потоков «scheduler». У меня 5 из них в состоянии ожидания. Периодически каждый из них будет работать, резко увеличивая процессор. Принимая дамп потока, кажется, что все эти потоки вызывают java.io.WinNTFileSystem.getBooleanAttributes
- что-то, что я видел, упоминалось несколько раз как потенциально проблематичное.
UPDATE: Недавно я играл с onSessionEnd на другом приложении, и обнаружил, что scheduler-x
нитей кажутся внутренней для ColdFusion - мое onSessionEnd задача всегда, кажется, работает в одной из этих нитей.
Глядя в папку temp, я вижу, что было сделано много папок EH Cache, которые, как я думаю, связаны с кешированием запросов. Приложения, которые у меня работают, используют это довольно широко. Я думал, что очистка папки temp может повысить производительность, но это не повлияло.
Следует отметить, что если я запустил службу CF, фактически не позвонив ни одному из моих приложений, проблема не возникает. Это может означать, что проблема связана с самими приложениями, однако они не вызывают никаких проблем в производстве - только в этом поле. Не задано никаких запланированных задач.
Ниже приведен пример одного из потоков, вызывающих высокий уровень ЦП. Я был бы признателен за любую помощь в диагностике того, что делает этот поток, и почему, а также как потенциально остановить его от использования стольких ресурсов.
"scheduler-2" - Thread [email protected]
java.lang.Thread.State: RUNNABLE
at java.io.WinNTFileSystem.getBooleanAttributes(Native Method)
at java.io.File.isDirectory(File.java:849)
at coldfusion.watch.Watcher.accept(Watcher.java:352)
at java.io.File.listFiles(File.java:1252)
at coldfusion.watch.Watcher.getFiles(Watcher.java:386)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
at coldfusion.watch.Watcher.checkWatchedDirectories(Watcher.java:166)
at coldfusion.watch.Watcher.run(Watcher.java:216)
at coldfusion.scheduling.ThreadPool.run(ThreadPool.java:211)
at coldfusion.scheduling.WorkerThread.run(WorkerThread.java:71)
Моя среда:
- Win 7 64-бит
- CF10 Update 12
- JDK 1.8.0_11
Проблема возникает на нескольких версиях JVM - эта версия в настоящее время используется для обеспечения доступности мониторинга.
Мои настройки Java:
- Минимальный размер кучи: 512mb
Максимальный размер кучи: 1024MB
-server -XX: MaxPermSize = 512m -XX: + UseParallelGC -Xbatch - Dcoldfusion.home = {application.home} -Dcoldfusion.rootDir = {application.home} -Dcoldfusion.libPath = {application.home}/lib -Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = true -Dcoldfusion.jsafe.defaultalgo = FIPS186Random - XX: + HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxrem ote.port = 8701 -Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.authenticate = false
Я бы солгал, если бы сказал, что понял, что все эти настройки делают! Извините, если вы один из тех людей, которые считают, что все разработчики CF должны быть экспертами в Java-приложении. Не я. Любая помощь, очень ценится. ;)
Я работал несколько лет с ColdFusion и, как вы, я не являюсь экспертом в стеке приложений Java. В прошлый раз, когда я широко использовал CFThread, я попытался установить максимальный размер кучи на 2 ГБ, что позволило решить все проблемы. Тем не менее, мое первое предположение из стека ошибок было бы в том, что Windows столкнулась с поврежденным/отсутствующим файлом или у пользователя CFThread возникли проблемы с авторизацией R/W. – wiesion
Спасибо за ввод. Я фактически не использую CFThread в этих приложениях - потоки, которые я сузил, чтобы казаться внутренним для ColdFusion, насколько я могу судить. Фактически, работая в dev-блоке, я могу быть абсолютно уверен, что никаких запросов в приложение не возникает, когда проблема возникает. В фоновом режиме нет запланированных задач, ничего не происходит в сеансах - я могу полностью отключить приложение, и сервер по-прежнему наносит 100% много часов спустя! –
У вас есть конфигурация DirectoryWatcher? если да, то он просматривает локальную директорию с каталогом/сетью? –