2016-06-07 3 views
0

My java desktop application (разработка с netbean) висит во время работы в течение длительного времени (около 10 часов).Что делать, если приложение JAVA Desktop работает?

Назначение моего приложения - вызвать веб-службу SOAP для корпоративной системы. Итак, для исполнения всегда требуется много времени.

Но в первые 1 - 4 часа он работает очень хорошо.

Эта проблема всегда возникает при работе более 10 часов.

Есть шаги, которые я сделал ниже.

  1. Используйте log4j для регистрации всех сообщений об исключениях. (Как я думаю, это может быть связано с подключением к сети, подключением к базе данных и т. Д.)

  2. Call System.gc() каждый раз в записях (как я думаю, когда он работает в течение длительного времени. ресурс обратно в систему, поэтому я заставляю его вызывать сборщик мусора).

Я испытанный в любой ситуации, что исключение может случается, такие как

  1. Сетевое подключение вниз.
  2. Время ожидания соединения.
  3. Предприятие отправляет сообщение назад как 500 Внутренняя ошибка. (И все ошибки http)
  4. Недопустимый формат XML-сообщения SOAP.
  5. Ошибка при анализе XML до
  6. Невозможно установить соединение с базой данных.
  7. Неверный запрос SQL.
  8. Неверный тип данных поля в базе данных.

Каждое исключение будет зафиксировано log4j и сможет продолжить работу.

Но это хорошо работает в первые 1 - 4 часа. Когда он достигнет 10 часов. Он повесился. Нет журнала. Нет сообщений.

Я использую JAVA JDK 1.8, база данных MySQL 5.5.4, Window Server 2008 R2 64бит

Не могли бы вы помочь предложить то, что пятно или точка мне не хватает?

Что-нибудь еще я должен касаться и проверять?

С наилучшими пожеланиями,

+0

Сколько памяти вы используете для своего приложения java? и увеличивается ли использование памяти с течением времени? Попробуйте установить более высокий или более низкий XMX и посмотреть, не влияет ли это на длительность, требуемую для сбоя. Если это произойдет, у вас будет место для запуска и может работать в ситуациях, когда вы можете связывать ресурсы. – sorifiend

+0

@sorifiend Память для этого приложения была выделена около 3 ГБ. Я отслеживал в диспетчере задач и вижу, что процесс javaw.exe (мое приложение) потребляет всего ~ 170 МБ. :( –

ответ

0

Простой ответ: DEBUG, добавить много лесозаготовительной/отладки.

Вы используете только с помощью log4j, чтобы проверить на наличие ошибок, но приложение, очевидно, висит в другом месте, прежде чем log4j есть шанс, чтобы сделать журнал, так что вместо этого я предлагаю вам сделать один из двух вещей:

1) Создать новый поток, который проверяет состояние вашего приложения (вам, очевидно, нужно будет подвергать части вашего кода этому потоку и периодически проверять его).

2) Самый простой вариант - добавить много отладочного кода, чтобы записывать все в файл, а затем, когда ваше приложение зависает, будет очень легко увидеть, что было последним действием, проверяя файл журнала и, возможно, точно знать что вызвало проблему. Поэтому лично, что просто регистрировать ошибки я сделал бы журнал перед обработкой любого из следующего: входящего соединения, таймаута, вызова базы данных, ошибок HTTP и почти любого другого крупного события, и я также сделал бы журнал после всех нижеследующий был обработан. Таким образом, когда ваше приложение зависает, просто посмотрите, какой процесс не был завершен, а затем вы можете начать расследование, почему это произошло, добавив еще больше отладки/протоколирования.

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

Смежные вопросы