[완료] 자바 에러인데요... 왜 에러가 나는지 모르겠습니다
글쓴이: tyolee83 / 작성시간: 화, 2005/08/23 - 11:33오전
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d6d80af, pid=2228, tid=2232
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
# Problematic frame:
# V [jvm.dll+0x980af]
#
# An error report file with more information is saved as hs_err_pid2228.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
이런 에러가 나버리네요 ㅠㅠ
정말 간단한 문자열 처리하는거거든요
이부분이에요 이 위에까진 println()으로 체크해봤구요
StringTokenizer info = new StringTokenizer(key, ":"); while(info.hasMoreTokens()) { String first = info.nextToken(); String second = info.nextToken(); System.out.println(first+"==>"+second); }
고수님들 부탁드립니다 ㅠㅠ
Forums:
VM 에러가 저 구문때문에 나는것 같진 않습니다만...풀소스를 올려주시면
VM 에러가 저 구문때문에 나는것 같진 않습니다만...풀소스를 올려주시면 좀 더 정확히 원인이 잡히지 않을까 생각하구요.
저 에러와는 상관없지만 올려주신 구문에서 토큰이 짝수가 아닐땐 마지막으로 second에 할당할 토큰이 없기 때문에 java.util.NoSuchElementException 이 nextToken() 에서 발생할 순 있겠군요.
hs_err_pid2228.log 파일 내용을 올려보세요.이런 에
hs_err_pid2228.log 파일 내용을 올려보세요.
이런 에러가 나는 경우 보통은 VM 버그입니다. 자바 코드때문에 나는 에러는 아니죠. 로그 파일 내용을 보면 더 상세히 알 수 있을 겁니다.
Re: 자바 에러인데요... 왜 에러가 나는지 모르겠습니다
일단 코드 자체에 문제가 조금 있습니다.
1. hasMoreTokens()를 호출하는 시점에 오직 하나의 토큰이 남아있어서 true를 리턴했다고 하면, 두번째 nextToken()호출(second = info.nextToken())은 문제를 발생할 소지가 있죠. 즉 위의 코드는 반드시 짝수개의 토큰이 있다는 전제하에서만 예외없는 동작이 보장됩니다.
2. hasMoreTokens()와 nextToken()은 한 쌍이라고 보시는 것이 좋습니다.
즉 hasMoreTokens()한번에 nextToken() 한 번인거죠.
3. StringTokenizer 자체는 deprecate되지 않았지만 Iterator로 대체 권고된 Enumeration에 의존하는 클래스입니다. 따라서 이 클래스를 사용하기 보다는 JDK1.4부터 추가된 String#split()메소드나 commons-lang의 StringUtils#split()메소드를 사용하시는 것이 더 좋을 것으로 생각됩니다.
뭐 이랬건 저랬건 VM이 뻗을 정도는 아닌데 말이죠... javadoc에는 NoSuchElementExeception이 발생한다고 나와있네요.
좀 더 확인해보고 버그 질러야 겠군요~
----
the smile has left your eyes...
로그 파일 올려봅니다.
그리고 풀소스를 올리기는 좀 모한데... ㅠㅠ
풀소스를 보여드려야 알수 있는 건가요?
정 안되면 뒤에 풀소스 올려보도록 하겠습니다.
우선 출력되다가 에러나는걸 올려보겠습니다.
꼭 도와주세요 ㅠㅠ
//TODO
JNI랑 붙이셨나요? 에러가 난다면 거기서 잘못한게 아닐까요?
JNI랑 붙이셨나요? 에러가 난다면 거기서 잘못한게 아닐까요?
--
Passion is like genius; a miracle.
JNI요??
JNI가 뭐죠? ;;;;
모르는건데 ㅠㅠ
//TODO
자바 네이티브 인터페이스입니다.자바는 가상머신에서 돌아가기 때문에 시
자바 네이티브 인터페이스입니다.
자바는 가상머신에서 돌아가기 때문에 시스템 함수나 그리고 명령어등은 직접 호출할수 없습니다.그래서 시스템 함수나 명령어등이 필요한 모듈은 C,C++로 짠다음에 그것을 JNI로 링크시켜서 자바 상에서 호출합니다.
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
풀소스 첨부합니다. 고수님들 많은 답변 부탁드려요 ㅠㅠ
위에분 말씀대로 StringTokenizer 대신 split 써봤구요
다해봐도 안되네요
소스 올리려고 주석을 최대한 많이 달아놨구요
에러난 부분 표시해 두었습니다.
정말 VM 버그일까요? ;;
이글 쓰고 1.4에서 컴파일을 한번 해봐야겠네요
아 빨리 해결해야 되는데 ㅠㅠ
꼭 좀 도와주세요 ㅠㅠ
//TODO
덧붙여서....
덧붙여서
제가 초보 프로그래머라 그러는데요
코딩 스타일이나 이런것도 지적 부탁드립니다 ^^
//TODO
제가 알기로는 윈도우 보안쪽에서 걸린거 같습니다.
자세히는 모르겠고요
일단 보안문제로 인해서 발생한걸로 보여집니다.
아마 서비스팩2를 설치하신거 같은데...
해결사항까지는 저도 찾아봐야겠구요. ^^
사용하시는 라이브러리중에 JNI 를 사용하시는게 있는거 같습니다.
사용하시는 라이브러리중에 JNI 를 사용하시는게 있는거 같습니다.
일단 이런 오류가 나오는 경우는 대부분 JVM 자체 버그일가능성이 크고요. 간혹 JNI 를 사용하면서 나는 오류가 있는데 이거는 정말 해결하기가 어려우실겁니다.
일단은 가장 최신 JVM 을 설치하고 테스트 해보심이....
현재 SDK 5.0으로 하고있는데;;
얼마전에 시작한거라서
5.0 update 4 깔아서 쓰고 있거든요...
근데 JNI를 쓰는 부분은 아무리 봐도 패킷 캡쳐하는 부분일텐데
캡쳐까지는 이상이 없고
문자열 처리하는곳에서 에러가 나는건 왜그럴까요....
옛날버전 SDK와 JRE를 사용해 봐야 하는걸까요? ㅠㅠ
//TODO
에혀 ㅠㅠ
JRE 1.4를 깔고 해봐도
똑같은 에러가 나네요
혹시나 하는 마음에 해봤는데 ㅠㅠ
패킷 데이터에서
호스트 네임만 잡아내면 되는데
위에 있는 방법 말고 다른 방법은 없을까요? ㅠㅠ
//TODO
라이브러리의 스레드 안정성을 확인하세요.
JpcapHandler 라는 것을 구현한것으로 보아 비동기식으로 동작하는 클래스같군요. 자바의 JNI를 이용하여 구현한 라이브러리들은, 그리고 특히 RAW_SOCKET을 다루는 경우에는 어떤 이유인지는 확실하지 않으나, 여러개의 스레드로 동작하는 경우 VM과 같이 뻗어버립니다. 1.3, 1.4, 1.5 버전 모두 그렇더군요.
작업 큐 같은것을 만들어서 동기식으로 한번에 하나씩 처리하도록 하는 별도의 스레드를 만들면 느리긴 하지만 이런 문제가 발생하지는 않을 것 같습니다.
위에분 말씀이... ㅠㅠ
제가 완전 초보라서
말이 이해가 안되는데요
대략 어떻게 하는것인지....
조금 자세하 설명해 주실수 없으신가요? ㅠㅠ
정말 죽겠네요 ㅠㅠ
//TODO
Re: 위에분 말씀이... ㅠㅠ
울지말고 웃으세요..
힘내시라고 한 여담이었습니다.
hotspot 의 고질적인 문제점
JNI 가 정상적으로 작동하였다는 가정하에...
가끔 hotspot VM 이 버그를 일으키는 상황은 빈번합니다. 보통은 코드캐시를 참조하다가 엄한 곳을 긁고 나서 뻗어버리더군요.
하위의 java버전에서 VM 실행옵션을 조절하여 hotspot 을 사용안하게 할 수 있습니다. 물론 이경우에도 jpcap 이 문제였다면 논외겠지만요.
여담입니다만, 1.5버전을 저도 사용을 해봤습니다만... 아직 성능쪽은 튜닝이 안된건지 어떻게 예전 버전보다 더 느리더군요... 과연 그들이 말하는 빠른 자바라는 것은 언제나 이루어질까요.
댓글 달기