powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
20 сообщений из 20, страница 1 из 1
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654021
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При запуске приложения сделать 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
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654052
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я как-то теряю связь. Что именно у вас отработало 12 часов? И что именно вы делаете когда возникает ошибка. Делаете new в проекте, который отработал 12 часов? Проект отработал, или приложение в JMV?
Это полный stacktrace?
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654054
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "отработало 12 часов"? где запущено приложение - в консоли, апп сервере или еще как? И поясните, как вы "создаете" класс?
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654499
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто именно у вас отработало 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
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654504
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте -Xnoclassgc
Но stacktrace у вас всё равно странный.
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654651
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А попробуй-ка выложить полный стектрейс, реально такое ощущение, что это левое исключение, а там на самом деле какой-нибудь SocketTimeout или нуллпоинтер, похожие странности встречал с WeakHashMap, у вас там случаем не используются какие нибудь слабые ссылки?
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37654770
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня простое консольное приложение, созданное в нетбинсе, со стандартными настройками. Сделал Build - получил MyApp.jar
и запускаю:
> java -jar MyApp.jar &>mylog.log &
проходит ~12 часов
и происходит то, что я написал выше. [/quot]
разлогинивался небось сессия и померла...
попробуй это
http://akuma.kohsuke.org/
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37655090
AndiRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки 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
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37655528
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня утром баг воспроизвести не получилось. Теперь ждем до вечера :./

Что я сделал вчера
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
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37655844
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно, я выяснил причину

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

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

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

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

...

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

______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37656027
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokТак а что не так в стактрейсе?
Всё ОК. Я просто как-то при чтении пропустил предпоследнюю строчку.
at console.ConsoleServer$Console.run(ConsoleServer.java:188)
иначе было похоже что в потоке запускается какой-то код, которого нет.
Добавьте логирование по совету AndiRa, находит ли класс-файл вообще. Добавьте noclassgc.
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37656039
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokТак а что не так в стактрейсе? Почему он у вас вызывает подозрения? Потому, что там Unknown Source? ну так я запускал под jre, а не под jdk - возможно, поэтому.
У вас 7-ка? Попробуйте 6-ку, вдруг поможет.
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37657550
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шестерка. Пользую 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
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37657553
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю
Я бы подозревал аппаратную ошибку, но до этого я пробовал openJDK. Данный поток под ней тоже был проблемный, что и сподвигло меня пробовать другую jvm. Если бы это было аппаратное, то вряд ли вылет был бы в том же потоке с похожими симптомами и много раз. И комп вроде не глючный.
...
Рейтинг: 0 / 0
NoClassDefFoundError при попытке сделать new классу, инстанс которого не создавался ~12ч
    #37657602
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуюй, сие может иметь отношение к багу:

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

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

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


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