Apache AJP1.3 Connector Tomcat 調整 packet size 方法

栏目: Java · 发布时间: 7年前

内容简介:今天公司某個站台報修出現異常狀況,查了之後反而找到另一個 catalina.out 跑出來的錯誤訊息:遇到這個問題通常就是踩到 limit 了,拿去查狗發現是在 AJP1.3 Connector 的預設 packet size 限制預設為 8192,通常每個 packet 不會超過這個大小,有可能是工程師開發時誤把 Body 的資料丟到 GET 造成 packet 過大。根解其實要去了解為何造成 packet 過大,但 Workaround 可以透過設定 packet size 暫時解套。

今天公司某個站台報修出現異常狀況,查了之後反而找到另一個 catalina.out 跑出來的錯誤訊息:

2019/5/28 12:10:16 org.apache.jk.common.MsgAjp cpBytes: Buffer overflow: buffer.len=8192 pos=8111 data=84 …
2019/5/28 12:10:16 org.apache.catalina.core.StandardWrapperValve invoke: Servlet.service() for servlet CfmServlet threw exception  java.lang.ArrayIndexOutOfBoundsException: 8192

遇到這個問題通常就是踩到 limit 了,拿去查狗發現是在 AJP1.3 Connector 的預設 packet size 限制預設為 8192,通常每個 packet 不會超過這個大小,有可能是工程師開發時誤把 Body 的資料丟到 GET 造成 packet 過大。

根解其實要去了解為何造成 packet 過大,但 Workaround 可以透過設定 packet size 暫時解套。

這邊遇到 AJP1.3 協定是 Apache + Mod_jk + Tomcat 時產生的問題,如果要調整 packet size 必須要 Connector 搭配 Tomcat 一起調整,詳細在官方文件都有提到:

If you change it from the default, you must also change the packetSize attribute of your AJP connector on the Tomcat side! 

切記兩邊一定要一起作業,而且數值要相同!

如果兩邊的 packet size 不一致,就會在 mod_jk.log 看到錯誤訊息說 Tomcat Network 有問題:

[Tue May 28 13:35:36.053 2019] [11772:3086083840] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (1283): wrong message size 8196 8192 from 127.0.0.1:8180  [Tue May 28 13:35:36.053 2019] [11772:3086083840] [error] ajp_get_reply::jk_ajp_common.c (2088): (tutor) Tomcat is down or network problems. Part of the response has already been sent to the client  [Tue May 28 13:35:36.053 2019] [11772:3086083840] [error] ajp_service::jk_ajp_common.c (2536): (tutor) sending request to tomcat failed (unrecoverable), because of protocol error (attempt=1)

Apache AJP1.3 (mod_jk) 設定

mod_jk 的設定在 workers.properties 加上 max_packet_size

worker.list=server
 
worker.server.port=8080
worker.server.host=127.0.0.1
worker.server.type=ajp13
worker.server.max_packet_size=65536

Tomcat Connector 設定

在 server.xml 的 AJP1.3 Connector 加上 packetSize

<Connector port="8080" maxHttpHeaderSize="8192" packetSize="65536"
           maxThreads="500" minSpareThreads="50" maxSpareThreads="100"
           connectionTimeout="120000" backlog="1000"
           enableLookups="false" redirectPort="8443"
           protocol="AJP/1.3"/>

Apache 和 Tomcat 都重啟後就搞定了!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

伟大创意的诞生

伟大创意的诞生

史蒂文·约翰逊 (Steven Johnson) / 盛杨燕 / 浙江人民出版社 / 2014-8-1 / CNY 52.90

 大家都认得出好创意。印刷机、铅笔、抽水马桶、电池、互联网、GPS、Google——这些都是绝妙的创意。然而,它们是如何产生的?被喻为“科技界的达尔文”的作者,在《伟大创意的诞生》一书中,提供了深具启示意义以及有论证实据的答案。  作者史蒂文•约翰逊以富有感染力、包罗万象的风格游历于多重领域,从神经生物学、都市研究,到网络文化,找出了独特创新背后的7大关键模式,深入人类600年重要发明的......一起来看看 《伟大创意的诞生》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具