Большое количество исключений в Java

Нас попросили контролировать производительность запущенного пакетного задания. Пакетное задание выполняется на сервере приложений Jeus и на 48-ядерном сервере HP UX. Рассматриваемое пакетное задание содержит около 1500 потоков. Максимальное количество исключений — NumberFormatException. Однако пакетное задание не завершается и продолжает выполняться.

Во время мониторинга с помощью HPJmeter я заметил, что возникают тысячи исключений. NumberFormat — лишь один из наиболее частых, но их гораздо больше. У меня есть следующие вопросы:

  • Является ли это показателем плохого дизайна/кодирования?
  • Сервер приложений обычно обрабатывает множество исключений и не сообщает о них?
  • Влияет ли это на производительность запущенных приложений? (Было около 11000 исключений примерно за 45 минут работы)

Спасибо, Адитья.


person Aditya    schedule 18.07.2012    source источник


Ответы (2)


  1. Да, тем более, что разработчики не прошлись и хотя бы завернули эти кастомные исключения. В противном случае они должны выводиться в лог-файл как предупреждения. Есть причина, по которой существуют библиотеки журналов.
  2. Если исключения реальны, то это может быть связано либо с нарушением кода, либо с изменением набора данных. Я бы рекомендовал отследить хотя бы одно задание, чтобы понять, почему возникают ошибки. Работая с петабайтами данных в задании раньше, я понимаю, насколько это может быть неприятно, но вам придется адски платить позже, если выходные данные этого задания затем будут использованы позже и вызовут у вас проблемы.
  3. Если вычислительный путь, вызывающий исключение, относительно легкий, то вызовы операций ввода-вывода и функций из исключения будут стоить дороже по сравнению с любыми вычислениями. Однако, учитывая, что вы получили только 11 тысяч исключений за 45 минут, это 4 исключения в секунду. Конечно, это плохо, но при условии, что никакие другие приложения не выполняют много операций ввода-вывода, тогда это не сильно заблокирует вашу работу.
person Arcymag    schedule 18.07.2012
comment
У нас есть много пакетных заданий, работающих одновременно. Рассматриваемый сервер также действует как сервер БД (оракул). Следовательно, МНОГО операций ввода-вывода происходит одновременно. Спасибо за объяснение, хотя. - person Aditya; 18.07.2012

Очевидным ответом на это будет

  1. Многие вещи, которые пытается выполнить ваше пакетное задание, скорее всего, не выполняются.
  2. Но кто знает, сумасшедший разработчик попытается что-то исправить в блоке catch и просто съест исключение (ложноотрицательный результат).
  3. Если код работал до сих пор и только начал выдавать исключения, возможно, ваш набор данных изменился ИЛИ разработчик выдает правильные исключения.
person Siddharth    schedule 18.07.2012
comment
Пакетная работа работает нормально. Когда я заметил это, нас попросили провести мониторинг производительности. Он съедает ресурсы процессора. Эти исключения не являются стопорами шоу. Спасибо за ответ. - person Aditya; 18.07.2012
comment
Так что да, пакетное задание пытается делать всю эту хрень, но безрезультатно, так что вы тратите циклы процессора впустую. Вместо этого просто поймайте ошибку в пользовательском интерфейсе. - person Siddharth; 18.07.2012