2016-09-09 8 views
1

내가 Payara (162) 내 유니폼이 응용 프로그램을 디버깅하려고 원인이 있지만 추적 정보가 인쇄 된 후 모든 요청에,이 예외가 클라이언트는 응답 얻을 수 없습니다 :활성화 저지 추적 로깅은 MaxHeaderCountExceededException

org.glassfish.grizzly.http.util.MimeHeaders$MaxHeaderCountExceededException: Illegal attempt to exceed the configured maximum number of headers: 100 
at org.glassfish.grizzly.http.util.MimeHeaders.createHeader(MimeHeaders.java:396) 
at org.glassfish.grizzly.http.util.MimeHeaders.addValue(MimeHeaders.java:422) 
at org.glassfish.grizzly.http.HttpHeader.addHeader(HttpHeader.java:707) 
at org.glassfish.grizzly.http.server.Response.addHeader(Response.java:1177) 
at org.apache.catalina.connector.Response.addHeader(Response.java:1221) 
at org.apache.catalina.connector.ResponseFacade.addHeader(ResponseFacade.java:579) 
at org.glassfish.jersey.servlet.internal.ResponseWriter.writeResponseStatusAndHeaders(ResponseWriter.java:165) 
at org.glassfish.jersey.server.ServerRuntime$Responder$1.getOutputStream(ServerRuntime.java:701) 
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200) 
at org.glassfish.jersey.message.internal.CommittingOutputStream.flushBuffer(CommittingOutputStream.java:305) 
at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:261) 
at org.glassfish.jersey.message.internal.CommittingOutputStream.close(CommittingOutputStream.java:276) 
at org.glassfish.jersey.message.internal.OutboundMessageContext.close(OutboundMessageContext.java:839) 
at org.glassfish.jersey.server.ContainerResponse.close(ContainerResponse.java:412) 
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:784) 
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444) 
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434) 
at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329) 
을 내 뉴저지에서

가 나는 그래서 추적 구성되는 앱 :

public class RestApplication extends ResourceConfig { 

public RestApplication() { 
    super(); 
    packages(true, "com.example"); 
    register(JacksonFeature.class); 
    register(JsonProvider.class); 
    register(RolesAllowedDynamicFeature.class); 

    property("jersey.config.server.tracing.type", "ON_DEMAND"); 
    property("jersey.config.server.tracing.threshold", "VERBOSE"); 
} 

} 내 logback.xml에서 로거를 활성화

을 (내가 logback를 사용하는 Payara를 구성한), 내 요청에 X-Jersey-Tracing-Accept 헤더를 추가하여 필요에 따라 활성화 할 때 내 서버 로그에 전체 추적 정보가 표시되지만 예외가 발생합니다. 요청에 헤더를 추가하지 않으면 모든 것이 작동하지만 물론 추적을 얻지 못합니다.

이 문제를 해결하기 위해 변경할 수있는 것이 있는지 또는 버그인지 궁금합니다.

답변

1

추적 할 때 각 이벤트마다 header into the REST response이 추가되는 것이 문제입니다.

그리즐리는 응답의 헤더 수에 제한을 두었습니다. 기본적으로 Payara Server는 응답에 100을 maximum number of headers으로 정의합니다. 응답에서 모든 추적 정보를 허용하려면이 수를 늘려야합니다.

최대 헤더 수를 늘리려면 asadmin을 사용해야합니다. GUI 관리 콘솔에서이 옵션을 설정할 수있는 옵션이 없으므로 화면에 HTTP 프로토콜을 구성 할 수 없습니다. 구성이 server-config 이름 및 네트워크 리스너가 http-listener-1 인 경우

는 다음 1000을 설정하려면 다음 asadmin 명령을 실행

및 asadmin>를 configs.config.server-config.network-설정을 설정 .protocols.protocol.http 청취자 1.http.max 응답 헤더 = 1000

당신은 당신이 설정할 옵션의 이름으로 max-response-headers을 대체, 모든 Grizzly network listener propertiesoptions을 설정하는 유사한 명령을 사용할 수 있습니다 ,사용은 낙타 대신 단어 구분 기호로 사용됩니다.

+0

감사합니다 @OndrejM, 나는 그것을 시도 할 것입니다. 비록 헤더의 수가 단일 숫자로되어 있으므로, 1을 더하면 100에 가깝지 않을 것입니다. –

+0

예! 작동했습니다! 나는 당신의 대답을 오해했는데, 당신이 응답에 하나의 헤더를 추가 할 것이라는 것을 의미한다고 생각했지만 실제로는 "많은 이벤트"당 하나의 헤더가 추가되었습니다. 그것이 100 개가 넘는 이유입니다. 감사합니다! –