Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч / 20 сообщений из 20, страница 1 из 1
09.02.2012, 15:32:37
    #37654021
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
При запуске приложения сделать new получается нормально, и если приложение поработало около 12 часов, то потом когда этот класс пытаюсь создать - бросается исключение вот такое:

ява-машинаException in thread "Thread-11" java.lang.NoClassDefFoundError: console/Command
at console.ConsoleServer$Console.run(ConsoleServer.java:188)
Caused by: java.lang.ClassNotFoundException: console.Command
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)


(в нем console- мой пакет, ConsoleServer-мой класс, в котором делается new Command(...) )

Файл Command.class есть в составе jar-файла. Проект создавался в нетбинсе, настройки - стандартные...
Если бы этого класса не было, то проект даже не откомпилился бы. jar-файл после компиляции никаким изменениям не подвергался classpath на этапе выполнения тоже не меняю, из сторонних либ только ini4j, которая дергается только в момент запуска.

В чем может быть дело?


Manifest.mf выглядит так:

netbeansManifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_29-b11 (Sun Microsystems Inc.)
Class-Path:
X-COMMENT: Main-Class will be added automatically by build
Main-Class: MyApp.Main


Он был создан не руками, а кнопочкой "build" в нетбинсе... Всякие файлы заданий для ant - тоже стандартные, созданные нетбинсом по умолчанию. Приложение простое консольное.
...
Рейтинг: 0 / 0
09.02.2012, 15:41:29
    #37654052
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
я как-то теряю связь. Что именно у вас отработало 12 часов? И что именно вы делаете когда возникает ошибка. Делаете new в проекте, который отработал 12 часов? Проект отработал, или приложение в JMV?
Это полный stacktrace?
...
Рейтинг: 0 / 0
09.02.2012, 15:42:35
    #37654054
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Что значит "отработало 12 часов"? где запущено приложение - в консоли, апп сервере или еще как? И поясните, как вы "создаете" класс?
...
Рейтинг: 0 / 0
09.02.2012, 17:58:00
    #37654499
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
авторЧто именно у вас отработало 12 часов?
Мое приложение

И что именно вы делаете когда возникает ошибка. Делаете new в проекте, который отработал 12 часов?

Весь код приводить - слишком много кода.
скажем так - к серверсокету, открытому приложением 12 часов, не было входящих подключений. То есть поток висел 12 часов на socket.accept();

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

Обработчик соединения видит - ему пришли данные и "\r", значит надо их обработать. Делает new Command(data);
Для данного примера data у меня равно "блаблабла\r". Command - это мой класс, принимающий строку в конструкторе.

И этот new Command(data); выбрасывает исключение


авторПроект отработал, или приложение в JMV?
эээ...а в чем отличие? и что такое JMV?

У меня простое консольное приложение, созданное в нетбинсе, со стандартными настройками. Сделал Build - получил MyApp.jar
и запускаю:
> java -jar MyApp.jar &>mylog.log &
проходит ~12 часов
и происходит то, что я написал выше. Если коннектиться телнетом раньше, то все ок. Такое впечатление, что баг возникает nj kb если socket.accept() ждет долгое время, то ли когда приложение долго работает. Все эти 12 часов в других потоках что-то крутилось, создавалось, и много чего делалось, но new Command() нигде не делалось. То есть такое впечатление, что gc очистил "лишние" классы и под его горячую руку попали те, что долго не были нужны.


авторЧто значит "отработало 12 часов"? где запущено приложение - в консоли, апп сервере или еще как? И поясните, как вы "создаете" класс?

Даа, вот то и значит. Запустили, проверили - все ок, все работает. Легли спать. Утром просыпаемся, конектимся - выкидывает ошибку. Перезапустили. Проверили - все ок. Вечером конектимся - снова ошибка.

Приложение запущено в консоле.
"создаю" инстанс класса посредством оператора new, всякую там рефлексию не использую - не нужна. жава машину использую шестую.

авторЭто полный stacktrace?
скопипастил все информативное, что вывелось, там еще "... 1 more"
...
Рейтинг: 0 / 0
09.02.2012, 18:01:09
    #37654504
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Попробуйте -Xnoclassgc
Но stacktrace у вас всё равно странный.
...
Рейтинг: 0 / 0
09.02.2012, 19:19:00
    #37654651
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
А попробуй-ка выложить полный стектрейс, реально такое ощущение, что это левое исключение, а там на самом деле какой-нибудь SocketTimeout или нуллпоинтер, похожие странности встречал с WeakHashMap, у вас там случаем не используются какие нибудь слабые ссылки?
...
Рейтинг: 0 / 0
09.02.2012, 20:28:24
    #37654770
drsm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
У меня простое консольное приложение, созданное в нетбинсе, со стандартными настройками. Сделал Build - получил MyApp.jar
и запускаю:
> java -jar MyApp.jar &>mylog.log &
проходит ~12 часов
и происходит то, что я написал выше. [/quot]
разлогинивался небось сессия и померла...
попробуй это
http://akuma.kohsuke.org/
...
Рейтинг: 0 / 0
10.02.2012, 02:13:55
    #37655090
AndiRa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
И все-таки java.lang.NoClassDefFoundError значит, что класс был доступен при компиляции, но не был доступен в тот момент, когда его хотели загрузить в runtime.

Попробуйте проверить доступность jar, обратившись к классу как к ресурсу до попытки его создания
Код: java
1.
2.
3.
4.
5.
// Если имя класса concole.Command
InputStream r = this.getClass().getClassLoader().getResourceAsStream("console/Command.class");
if(r == null) {
   // Оппа! Файл не доступен для загрузки!
}
...
Рейтинг: 0 / 0
10.02.2012, 12:06:49
    #37655528
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Сегодня утром баг воспроизвести не получилось. Теперь ждем до вечера :./

Что я сделал вчера
1. мне показалось, что имена классов слишком "стандартны" и я их переименовал на всякий случай. Чтобы они не пересеклись с какими-нибудь системными. Глупо конечно, но тем не менее.
2. добавил try-cacth, с рапечаткой полного стактрейса
3. добавил в командную строку <&- Этот финт ушами, согласно статье на хабре, закрывает поток ввода. Согласно статье, надо делать еще и System.in.close(). Но у меня одновременно <&- в строке запуска и close() в программе не заработало - ругалось на класслодеры еще при загрузке. То есть либо одно, либо другое.

А чем странный стактрейс? Может это в jre новой он такой и есть? Потому что все мои действия сейчас направлены в большей степени на получение полного стактрейса, поэтому рекомендации, которые мне тут дали, я пока не начал пробовать.

насколько я нагуглил, NoClassDefFoundError возникает, когда на этапе исполнения jvm не может найти класс. Получается, что этот баг может возникать по вине операционки, или если jar-ник за эти ~12 часов подменили? У меня его никто не подменял, но может операционка (убунту 10.10) решила, что его заменили, или "не увидела" его по какой-нибудь другой причине?

Мог ли баг возникнуть от того, что PATH не была установлена в $JAVA_HOME/bin:$JAVA_HOME/lib hotspot jvm, а в том PATH, который был в системе, была openjdk? (если что - под openjdk оно тоже глючило, но или вообще тихо или с падением по sigbus где-то внутри libz, потому и решил потестить на hotspot)
...
Рейтинг: 0 / 0
10.02.2012, 14:18:01
    #37655844
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
возможно, я выяснил причину

У меня скрипт, который по крону перезапускал приложение, делал export JAVA_HOME=путь, а только потом порверял есть ли это приложение в списке процессов. То есть получается, JAVA_HOME ставилось раз в 5 минут. И хоть оно ставилось таким же точно, это, теоретически, могло плохо повлиять на работу jvm.

сейчас я подкрректировал и это. Посмотрим, что будет.
...
Рейтинг: 0 / 0
10.02.2012, 14:20:13
    #37655850
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
chabapokУ меня скрипт, который по крону перезапускал приложение
Т.е. 12 часов непрерывной работы, это, мягко говоря, не правда?
...
Рейтинг: 0 / 0
10.02.2012, 14:51:02
    #37655936
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Правда. Ну может не 12, может 7..8. Но это ничего не меняет по сути.
Логи не врут. Каждый акт перезапуска - это запись в лог.

Перезапуск был сделан скорей на всякий случай, если выключат/перегрузят машину, а так вообще приложение не падало.
Кстати, мягких и софт-ссылок тоже не использую.
...
Рейтинг: 0 / 0
10.02.2012, 15:10:25
    #37655995
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Да, и 7..8ч - это не в том смысле, что оно упало через 7 часов, а в том смысле, что вышеописанный баг был зафиксирован через это время. Ну то есть где-то в 12 ночи запустил, проверил все - рабоатет. А в 9-10утра снова проверил и - уже в логах экзепшен.

То есть идея в том, что баг появляется через довольно большое время.

...

Так а что не так в стактрейсе? Почему он у вас вызывает подозрения? Потому, что там Unknown Source? ну так я запускал под jre, а не под jdk - возможно, поэтому.
...
Рейтинг: 0 / 0
10.02.2012, 15:20:20
    #37656015
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
chabapokА в 9-10утра снова проверил
комп заснул и дамп на диск сбросил?

______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
10.02.2012, 15:26:00
    #37656027
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
chabapokТак а что не так в стактрейсе?
Всё ОК. Я просто как-то при чтении пропустил предпоследнюю строчку.
at console.ConsoleServer$Console.run(ConsoleServer.java:188)
иначе было похоже что в потоке запускается какой-то код, которого нет.
Добавьте логирование по совету AndiRa, находит ли класс-файл вообще. Добавьте noclassgc.
...
Рейтинг: 0 / 0
10.02.2012, 15:27:55
    #37656039
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
chabapokТак а что не так в стактрейсе? Почему он у вас вызывает подозрения? Потому, что там Unknown Source? ну так я запускал под jre, а не под jdk - возможно, поэтому.
У вас 7-ка? Попробуйте 6-ку, вдруг поможет.
...
Рейтинг: 0 / 0
12.02.2012, 03:14:29
    #37657550
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Шестерка. Пользую 1.6.0_30

Сегодня опять баг вылез. И опять полный стактрейс не распечало. printStackTrace() пишет " ...1 more", а попытка сделать for(StackTraceElement ste:ex.getStackTrace())System.out.println(ste.toString()); тоже не увенчалась успехом - вообще отдало одну последнюю строчку :(

Добавил по совету -Xnoclassgc и проверку доступности ресурса. Запустил - пробую приконнектится - jvm падает c SIGSEGV. Создается лог со всякими регистрами, потоками и тд и тп. Создается коредамп java-машины. Падает где-то внутри libc.so. Не знаю, уместно ли сюда давать 20кб логов. По этим логам памяти машине вроде хватает. В свопе системы вообще 0. Памяти внути жава-машины тоже хватает.

Запускаю второй раз - все работает. Посмотрим. Вообще никаких идей. Падение жава-машины настораживает. Дело в том, что этот поток вообще самый простой и независимый. Он никуда в другие потоки не лезет, и с другими потоками не контактирует, фактически.
...
Рейтинг: 0 / 0
12.02.2012, 03:56:23
    #37657553
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Добавлю
Я бы подозревал аппаратную ошибку, но до этого я пробовал openJDK. Данный поток под ней тоже был проблемный, что и сподвигло меня пробовать другую jvm. Если бы это было аппаратное, то вряд ли вылет был бы в том же потоке с похожими симптомами и много раз. И комп вроде не глючный.
...
Рейтинг: 0 / 0
12.02.2012, 10:29:40
    #37657602
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Пожалуюй, сие может иметь отношение к багу:

К машине подключен утеловский 3g-модем. Этот модем периодически может переконнекчиваться, при этом айпи-адрес машине может выдаваться с другой. А сокет открыт на прослушку соединений с 0.0.0.0
ну и еще dyndns юзаю, но эот уже вряд ли имеет отношение к багу.

гипотеза такая: во время подвисшей фазы accept() в ожидании соединений, DHCP выдает машине новый айпишник.

Сейчас буду пытаться воспроизвести такую ситуацию.
...
Рейтинг: 0 / 0
12.02.2012, 11:14:38
    #37657615
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
Нет, не оно. Падения не случилось и все отработало нормально.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]