2015-12-22 2 views
0

Я не разработчик Java, но сегодня я нахожу себя в этой шляпе, поэтому несите меня.Производительность JVM снизу в ночное время. Что случилось?

Когда я перестал работать с парсером файлов прошлой ночью, я видел контрольные отметки в 100 тыс. Записей в секунду, что я был более чем счастлив. Когда утром я снова запускал один и тот же код в отношении тех же файлов, я вижу только 10-12 тыс. Записей в секунду.

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

У меня был сотрудник, работающий на полнофункциональной версии банки на собственной машине, и он видит тесты производительности 100 тыс./С, которые я видел вчера вечером, поэтому я могу только предположить, что с моей JVM/рабочей станцией что-то не так.

Любые идеи или мысли о том, на что я должен смотреть? Я не решаюсь войти в настройку производительности JVM, когда я уже знаю, что JVM на складе более чем способен выполнить эту задачу. Я просто не понимаю, что изменилось с прошлой ночи.

EDIT: Я перезагрузил машину.

EDIT 2: На следующий день. Я загрузил свой ноутбук и запустил код, он вернулся туда, где он был в первую очередь - 100 к/пс. Вчера я проверил монитор производительности Windows, и он не показал необычного количества CPU, RAM или дискового ввода-вывода, поэтому я действительно не понимаю, почему это произошло.

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

+0

Запустите профилировщик ('jvisualvm' включен в JDK). – Kayaman

+1

Ваша машина может быть занята каким-то фоновым заданием, которое потребляет процессор или диск. Если все остальное не удается, старый ответ «перезагрузки» обычно является способом решения этой странности – Andreas

ответ

0

Проблема, кажется, решена.

С момента публикации, одно из моих действий - исключить файл подкачки Windows на случай, если это будет вопрос подкачки. Это помогло, но не так сильно, как мне было нужно.

Что, по-видимому, оказало наибольшее влияние, это выделение значительного объема памяти для JVM при запуске. Я предполагаю, что JVM, возможно, пыталась распределить достаточно памяти динамически. Я в настоящее время работает его со следующими параметрами:

-server -Xmx4096m -Xms4096m 

Я добавил флаг сервера, так как это предназначено, чтобы быть длительный процесс, и я не забочусь о времени запуска, а аргументы памяти должен дать JVM прочную, статичную 4 ГБ памяти для работы.

С тех пор у меня не было проблем с производительностью.

+1

Помните, что чем больше памяти вы используете, тем больше нужно будет собрать мусор позже. – Jason