Coldfusion 10 медленнее при использовании Java 1.7 по сравнению с 1.6
У меня работает веб-сервис Coldfusion 10 64bit
, Исследуя утечку памяти, я решил обновить JRE с 1.6 до 1.7, но заметил значительное снижение производительности. Я создал простой тестовый веб-сервис, который на JRE 1.6 мог легко запускать со скоростью 5000 запросов в минуту, как только я изменил JRE на 1.7, хотя эта скорость падает слишком на 2000 или менее в минуту. Кто-нибудь знает настройки тюнинга или что-то мне не хватает.
Предпочтение состоит в том, чтобы использовать JRE 1.7
поскольку это, кажется, устранило проблему утечки памяти, которую я имел.
Запущенный сервер JRE: Java-версия "1.7.0_51" Java(TM) SE Runtime Environment (сборка 1.7.0_51-b13) 64-разрядная серверная виртуальная машина Java HotSpot(TM) (сборка 24.51-b03, смешанный режим)
Сборка мусора в настройках JVM:
-XX:+UseParallelGC
Изменена сборка мусора на:
-XX:+UseG1GC
это не имеет значения.
Следовал рекомендациям отсюда без увеличения производительности. Будет обзор с jvisualvm и опубликовать мои выводы.
Обновление: Java 7 изменил способ синхронизации загрузчиков классов, и похоже, что это может быть причиной замедления.
Обновление Adobe признала ошибку и пытается ее исправить. База ошибок Adobe.
2 ответа
Ответ на это заключается в том, что Adobe признала ошибку и пытается ее исправить. База ошибок Adobe.
Я бы порекомендовал вам просмотреть данные дампа потоков JVM в промежутке между вашими 2 нагрузочными тестами (JRE 1.6 против JRE 1.7). В прошлом я видел проблемы с загрузчиком классов CF10, связанные с использованием cfdump и cfquery в памяти (запрос запросов).
Сосредоточьте свой анализ на любой проблеме конфликта блокировки потоков, с которой вы можете столкнуться в JRE 1.7.
Изменение загрузчика классов, на которое вы ссылаетесь, должно фактически улучшить параллелизм операций загрузки классов, но все же не исключено, что оно может вызвать некоторую медлительность в вашей среде.
Другая рекомендация состоит в том, чтобы посмотреть на вашу скорость выделения памяти GC Для этого включите verbose:gc и сравните выходные данные между двумя вашими прогонами. Определите, может ли любое увеличение скорости выделения памяти GC и / или частоты GC быть основной причиной этого падения пропускной способности.
Наконец, выполните очень тщательный анализ аргументов JVM. Убедитесь, что ваши аргументы настройки кучи Java, включая размер кучи, точно такие же, как в JRE 1.6, чтобы мы могли сравнить яблоки и яблоки.