Tomcat報BAD packet signature 18245錯誤的原因


今天在啟動服務器時,報了一個BAD packet signature 18245錯誤

詳細錯誤如下:

[java] view plain copy
  1. 2009-6-5 11:09:11 org.apache.jk.common.MsgAjp processHeader  
  2. 嚴重: BAD packet signature 18245  
  3. 2009-6-5 11:09:11 org.apache.jk.common.ChannelSocket processConnection  
  4. 嚴重: Error, processing connection  
  5. java.lang.IndexOutOfBoundsException  
  6.     at java.io.BufferedInputStream.read(BufferedInputStream.java:306)  
  7.     at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:626)  
  8.     at org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:583)  
  9.     at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:691)  
  10.     at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)  
  11.     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)  
  12.     at java.lang.Thread.run(Thread.java:595)  

這是一個AJP協議處理的包。

查了一下Tomcat的server.xml中配置文件

[c-sharp] view plain copy
  1. <Connector port="8009"   
  2.                enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />  

初步斷定,有一些不是AJP協議的請求,請求了這個端口。

 

解決方法:

用端口掃描工具(優化大師,防火牆,ewido等都可以)掃描系統網絡連接狀態,查看了一下是否有訪問8009端口的程序。

關閉這個程序就OK了。

 

我這邊是因為IDE自啟動IE,訪問路徑端口被修改成了:http://localhost:8009 把端口修改回了8080端口就OK了。

 

 

參考資料:

 AJP協議

AJP是定向包協議。因為性能原因,使用二進制格式來傳輸可讀性文本。WEB服務器通過TCP連接和SERVLET容器連接。為了減少進程生成 socket的花費,WEB服務器和SERVLET容器之間嘗試保持持久性的TCP連接,對多個請求/回復循環重用一個連接。一旦連接分配給一個特定的請 求,在請求處理循環結束之前不會在分配。換句話說,在連接上,請求不是多元的。這個是連接兩端的編碼變得容易,雖然這導致在一時刻會有很多連接。
  一旦WEB服務器打開了一個到SERVLET容器的連接,連接處於下面的狀態:
◆ 空閑
這個連接上沒有處理的請求。
◆ 已分派
連接正在處理特定的請求。
  一旦一個連接被分配給一個特定的請求,在連接上發送的基本請求信息是高度壓縮的。在這點,SERVLET容器大概准備開始處理請求,當它處理的時候,它能發回下面的信息給WEB服務器:
◆ SEND_HEADERS
發送一組頭到瀏覽器。
◆ SEND_BODY_CHUNK
   發送一塊主體數據到瀏覽器。
◆ GET_BODY_CHUNK
從請求獲得下一個數據如果還沒有全部傳輸完,如果請求內容的包長度非常大或者長度不確定,這是非常必要的。例如上載文件。注意這和HTTP的塊傳輸沒有關聯。
◆ END_RESPONSE
結束請求處理循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM