记一篇不知名的错误,在我将一个web项目放到客户服务器上之后,Tomcat虽然启动成功,但是出现非常令人无奈的效果:只在项目启动的一段时间内可以访问,过了一段时间之后就会出现类似休眠的状态,必须人为远程登录服务器才可以重启Tomcat才可以,关键是哪里都不报错,这个是真的让我很无奈,一度以为是服务器的原因,后来没办法突然想起来查看一下Tomcat启动日志,果然,Tomcat启动的时候报错了,但是并不影响项目的运行,以下为日志信息:
22-Oct-2018 09:02:52.898 信息 [http-nio-2000-exec-85] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:426)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
22-Oct-2018 09:02:52.898 信息 [http-nio-2000-exec-88] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:426)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
解决办法:在Tomcat的server.xml配置文件中加入这么一段话:
<Connector port="2000" protocol="org.apache.coyote.http11.Http11Protocol"
connectionTimeout="20000"
redirectPort="8443"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="200"
acceptCount="1000"
maxConnections="1000"
keepAliveTimeout="15000"
maxKeepAliveRequests="1"
tcpNoDelay="true"
enableLookups="false"
URIEncoding="UTF-8"/>
在原有基础上添加即可,有人告诉我只添加maxHttpHeaderSize="8192"
一句话即可,可是我怕,担心再出问题,直接一套加上来,保存之后重启Tomcat,然后再去查看日志信息,终于不报错了,万事大吉,今天启动试试明天能不能继续访问吧,如果能说明我的解决措施没问题,如果不能,继续改。
这是昨天写的文章,今天又上去试了一下,终于不死掉了,万幸。