2012-07-05 1 views
0

Listing 인스턴스에 참조 ArrayList를 할당하려고 할 때 backing bean 중 하나 인 weblogic10.3.4에 JSF2.1 응용 프로그램이 배포되었습니다. 트래픽이 극심 할 때 weblogic이 Struck 스레드로 끝납니다. 우리의 응용 프로그램에.Weblogic Stuck Thread - ArrayList

java.util.ArrayList.indexOf(ArrayList.java:210) 
java.util.ArrayList.contains(ArrayList.java:199) 

어느 누구도 이전에이 문제에 직면했습니다.

+0

"stuck thread"를 의미합니까? –

+0

예 스레드가 걸렸습니다 – user684434

답변

1

당신이 의미하는 바가 완전히 명확하지 않으므로 "stuck thread"를 의미한다고 가정 할 것입니다. 그리고 스레드는 그 시점에서 지속적으로 실행된다는 의미로 붙어 있습니다.

나는 그럴듯한 3 가지 원인을 생각할 수 있습니다. 검색되는

  • 목적은 일부 상황에서 무한 루프가는 버 equals(Object) 방법이있다.

  • 목록을 거의 동시에 액세스 및/또는 업데이트하는 스레드가 두 개 이상 있으며 올바르게 동기화되지 않습니다. 제대로 동기화하지 않으면 스레드가 데이터 구조의 일관성없는 뷰를 보게되고 이로 인해 불가능한 것처럼 보이게됩니다.

  • 당신은 어떻게 든 하나의 스레드가 두 개의 별개 목록이 있다는 (잘못된) 믿음의 목록을 읽고 업데이트하는 원인이되는 병리 적 상황을 설정했습니다.

"heisenbugs"는 서버 부하가 높을 때 발생할 가능성이 높기 때문에 두 번째 문제입니다.


마지막으로 스레드가 무한 루프가 아니어도 작업을 수행하는 데 오랜 시간이 걸릴 수 있습니다. 그리고 루프가 다른 코드와 관련 될 수도 있지만, 당신이 볼 때마다 그 시점에 있습니다.

+0

자세한 답변 주셔서 감사합니다, 내 문제는 내 사용자 지정 equals 메서드에 있습니다. – user684434

+0

equals를 재정의하는 경우 해시 코드도 재정의해야합니다. Effective Java의이 샘플 장의 항목 8을 참조하십시오. http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf – BestPractices

+0

@BestPractices - OP가 이것을 이미 알지 못했다는 증거를 지적 할 수 있습니까? 그리고/또는 그는 이미 이것을하지 않았습니까? –