2010-01-21 6 views
2

32 비트가 아닌 64 비트 VM을 사용하여 * .war 파일을 생성 할 때 차이가 있습니까?* .WAR (64 비트 x 32 비트) 생성

저는 최근에 구입 한 새 랩톱 (Windows 7 및 AMD 64bits 프로세서)을 사용하여 응용 프로그램을 배포 한 후 문제가 있습니다. 어떤 응용 프로그램 소스 코드에서 건드리지는 않았지만 Eclipse/Galileo를 통해 * .war를 생성 한 다음 서버에 배포 할 때마다 런타임에 "Permgen Space"예외가 발생했습니다. 보고서 - Jasper Report에 내장되어 있습니다. 서버 쪽에서는 로컬 컴퓨터뿐 아니라 이전 컴퓨터 (32 비트)에서 생성 된 * .war 파일도 제대로 작동합니다.

상자에 대한 몇 가지 세부 사항을 다음과 같습니다

로컬 :

  • 자바 1.6.0_18 (64 비트)
  • 아파치 톰캣/6.0.20

서버 측면 :

  • 자바 1.6.0_07 (32 비트)
  • 아파치 톰캣/6.0.20
다음

당신은 예외가 기록을 참조 할 수 있습니다

javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space 
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:295) 
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170) 
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425) 
br.com.innosoft.jzytho.framework.struts.action.AcessoAction.processActionPerform(AcessoAction.java:166) 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) 
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 

당신이 더 필요하면 알려주세요 세부 묘사.

미리 감사드립니다. 일반적으로

+0

32 비트/64 비트는 여기에서 문제가되지 않습니다. 특히 빌드 환경 만 다른 경우. –

+1

어쩌면 여기서 실제 예외를 붙여 넣을 수 있기 때문에 여기있는 사람들이 더 나은 기회를 가질 수 있습니다. – bryantsai

답변

2

: 제

나는 생산을 통해 dev에 우리의 응용 프로그램에 대한 전쟁을 구축하기 위해 동일한 스크립트를 사용합니다. 모든 프로덕션 서버는 현재 64 비트이지만 지난 32 비트에있었습니다. 일부 dev 박스는 64 비트, 일부 32 비트이지만 모두 패키징 전쟁에 동일한 메커니즘을 사용합니다.

Permgen 공간은 사용 가능한 메모리 및 클래스 메타 데이터와 관련된 메모리 문제입니다. 이며 프로세서/OS 아키텍처의 영향을받습니다.

는 여기에 대한 설명은 다음과 같습니다 Explaining java.lang.OutOfMemoryError: PermGen space

짧은 대답은 JVM의 시작 매개 변수 -XX를 추가 할 수 있습니다 : PermSize = 64m 또는 --XX : PermSize = 128m 32 비트 플랫폼에서 JVM을 시작할 때.

+0

음 ... 그냥 시작 코드를 보았습니다. 우리는 실제로 -XX : MaxPermSize = 256m보다는 -XX : PermSize = something을 사용합니다. 우리가이 문제를 겪은 이후로 꽤 오랜 시간이 걸렸습니다. 그래서 나는 거의 잊어 버렸습니다. – SuperMagic

+0

그래, 고마워,하지만 *. war의 가장 오래된 버전이 같은 서버에서 작동하는 이유는 무엇입니까? –

+0

나는 그 안에 클래스가 적고 PermGen 버퍼 제한에 맞춰 실행되지 않았을 것이라고 생각한다. 사용자 클래스를 설명하는 메타 데이터 용으로 예약 된 메모리 영역입니다. 그러한 클래스는 적습니다 = 적은 PermGen 간격으로 사용됩니다. 더 많은 클래스를 가진 최신 전쟁 = 더 많은 PermGen 공간 필요. – SuperMagic

1

64 비트 VM 또는 32 비트를 사용하여 WAR 파일을 생성해도 차이는 없습니다. WAR는 기본적으로 ZIP 파일 형식입니다. 파일 형식은 VM에서 변경되지 않습니다.

+0

네,하지만이 경우에는 바이트 코드를 찾을 수 있습니다 ... * .war의 가장 오래된 버전이 같은 서버에서 작동하는 이유는 무엇입니까? 설명해 주시겠습니까? –

+0

두 Tomcat간에 구성에 차이가 있습니까? Eclipse 또는 독립 실행 형으로 실행하고 있습니까? –

+0

예, 있습니다. 동일한 버전이지만 differente 배포판. 로컬에서는 Eclipse에서 Tomcat을 실행 중이다. –

관련 문제