Print
카테고리: [ Web Application Server ]
조회수: 5108

 

JBoss 6.2 EAP 기반 모니터링 툴을 사용 중 다음과 같은 오류가 발생했습니다.

JBWEB000065: HTTP Status 500 - java.lang.NumberFormatException: For input string: "83641786051"
 
--------------------------------------------------------------------------------
 
JBWEB000309: type JBWEB000066: Exception report
 
JBWEB000068: message java.lang.NumberFormatException: For input string: "83641786051"
 
JBWEB000069: description JBWEB000145: The server encountered an internal error that prevented it from fulfilling this request.
 
JBWEB000070: exception
 
org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "83641786051"
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:409)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:309)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:242)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
JBWEB000071: root cause
 
java.lang.NumberFormatException: For input string: "83641786051"
        java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        java.lang.Integer.parseInt(Integer.java:495)
        java.lang.Integer.parseInt(Integer.java:527)
        org.jboss.dmr.StringModelValue.asInt(StringModelValue.java:139)
        org.jboss.dmr.ModelNode.asInt(ModelNode.java:240)
        org.jboss.as.jmx.model.TypeConverters$IntegerValueAccessor.fromModelNode(TypeConverters.java:778)
        org.jboss.as.jmx.model.TypeConverters$SimpleTypeConverter.fromModelNode(TypeConverters.java:223)
        org.jboss.as.jmx.model.TypeConverters.fromModelNode(TypeConverters.java:114)
        org.jboss.as.jmx.model.ModelControllerMBeanHelper.getAttribute(ModelControllerMBeanHelper.java:255)
        org.jboss.as.jmx.model.ModelControllerMBeanHelper.getAttribute(ModelControllerMBeanHelper.java:210)
        org.jboss.as.jmx.model.ModelControllerMBeanServerPlugin.getAttribute(ModelControllerMBeanServerPlugin.java:94)
        org.jboss.as.jmx.PluggableMBeanServerImpl.getAttribute(PluggableMBeanServerImpl.java:382)
        org.apache.jsp.wasmon_005f62_jsp._jspService(wasmon_005f62_jsp.java:268)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:69)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:365)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:309)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:242)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
JBWEB000072: note JBWEB000073: The full stack trace of the root cause is available in the JBoss Web/7.2.2.Final-redhat-1 logs.
 

 

정확한 원인을 찾기 위해 mon_005f62_jsp.java 파일을 분석하여 보았습니다.

이 컴파일된 java 파일과 stacktrace를 확인해보니, Connector의 bytesSent 값(Runtime)을 가져오는 부분이었습니다. JBoss 6.2 EAP의 Connector 소스(WebConnectorMetrics.class)를 확인해 보니 bytesSents와 bytesReceived는 다음과 같이 Integer 형식으로 관리되고 있습니다.

오류 메세지에 따르면 "83641786051"을 Integer.parseInt 하다가 Exception이 발생하였는데 당시 bytesSent인 83641786051가 Integer를 벗어나는 값이기 때문입니다.

  protected static final SimpleAttributeDefinition BYTES_SENT =
    new SimpleAttributeDefinitionBuilder("bytesSent", ModelType.INT, true).setStorageRuntime().build();
  protected static final SimpleAttributeDefinition BYTES_RECEIVED =
    new SimpleAttributeDefinitionBuilder("bytesReceived", ModelType.INT, true).setStorageRuntime().build();

 

참고로 Tomcat은 이 값들을 long으로 관리하고 있어 큰 범위의 데이터 처리에도 Exception이 발생하지 않습니다.

    // -------------------- Statistical data  --------------------
    // Collected at the end of each request.
    private long bytesSent;
    private long bytesReceived;

End.