1. 程式人生 > >Tomcat異常錯誤

Tomcat異常錯誤

記一篇不知名的錯誤,在我將一個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,然後再去檢視日誌資訊,終於不報錯了,萬事大吉,今天啟動試試明天能不能繼續訪問吧,如果能說明我的解決措施沒問題,如果不能,繼續改。
這是昨天寫的文章,今天又上去試了一下,終於不死掉了,萬幸。