Hi,

we have a problem of request params beeing null in servlets where it
shouldn't be ( post or get, in get we can even see that
request.getQueryString() is fine, but params are null).

It is more pronounced when using dedicated thread executor, moving to
threads provided by connector itself (with maxThreads="500" option using NIO
) seems to be lowering counts of errors. 


Atm we are seeing 3 modes of failure in our tomcat setup ( nginx reverse
proxy -> tomcat with NIO connector )


1)
SEVERE: Error finishing response
java.lang.NullPointerException

and/or

SEVERE: Error processing request
java.lang.NullPointerException

in logs. ( could be some app problem, but still shady, as no stack trace is
given, like if exception object is gone itself??? )

2) Sometimes we get 502 (from nginx, that got upstream error) like Rakesh in
other thread, from servlets that should be fine ( result of NPE in real
strange places ).

3) And most scary ones are the following:

2011 09 13 14:18:20.568 WARN  Servlet  - error response: error=no action
query: [type=groupsChangedAction&v=1315912033175] content type:null
protocol: HTTP/1.0 length:-1 character encoding: null  GET
2011 09 13 14:18:20.937 WARN  Servlet  - error response: error=no action
query: [type=groupsChangedAction&v=1315912699092] content type:null
protocol: HTTP/1.0 length:-1 character encoding: null  GET

In tomcat access log they are shown as:
127.0.0.1 - - [13/Sep/2011:14:18:20 +0300] "GET
/ourapp/servlet/Servlet?type=groupsChangedAction&v=1315912033175 HTTP/1.0"
200 15
127.0.0.1 - - [13/Sep/2011:14:18:20 +0300] "GET
/ourapp/servlet/Servlet?type=groupsChangedAction&v=1315912699092 HTTP/1.0"
200 15

So as you can see, tomcat got that GET reqest with type and v params like it
gets and processes thousands others.

Servlet code looks like:
private void doProcess(HttpServletRequest request, HttpServletResponse
response) throws IOException {
                HttpSession session = request.getSession();
                if (session != null) {

                        String action = request.getParameter("type");
                        logger.debug("action: " + action);
                       
                        if (action == null) {

                                printError(request, response,"error=no
action");
....

        private void printError(HttpServletRequest request,
HttpServletResponse response, String error) throws IOException {
                logger.warn("error response: " + error + " ip: "  +
request.getRemoteAddr() + " query: [" + request.getQueryString() + "]" + "
content type:" + request.getContentType() + " protocol: " +
request.getProtocol() +  " length:" + request.getContentLength() + "
character encoding: " + request.getCharacterEncoding() + "  " +
request.getMethod());
           
                response.setContentType("text/plain");
                PrintWriter out = response.getWriter();
                out.print(error);
                out.flush();
                out.close();
        }

It happens several times in a day in bursts ( GC collecting something?).


So really puzzling and random error, tomcat got proper request as shown in
access logs (and even request.getQueryString() is valid :) ) , processed
request from same user 5s ago, will process one more 5s later, but somehow
request is NULL??? Now we handle it by retrying, but such random NULL is
fatal for other servlets and services that throw NPEs and it seems that some
tomcat code is affected too with (1).


I'd grateful if some smart guys could look into this problem and willing to
provide any other info.


Only connector running is:
    <Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               enableLookups="false"
               acceptCount="1000"
               maxThreads="500"
               maxPostSize="10485760"
                />

Also using 
<Valve className="org.apache.catalina.valves.RemoteIpValve"
        protocolHeader="X-Forwarded-Proto" />


BR,

Darius. 




-- 
View this message in context: 
http://old.nabble.com/Request-params-randomly-null-in-servlet%28s%29-tp32461421p32461421.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to