You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Peter Rossbach <pr...@objektpark.de> on 2006/12/12 19:04:59 UTC

mod_jk 1.2.20 max_packet_size handling

Hi Rainer and Mladen,

I made the paketSize port to tomcat 5.5 tree. Now, I start some  
testing and ...

- I have successfull send more than 8k to the client with a download  
request.
But I must patch o.a.c.connector.Response and  
AjpAprProcessor.SocketOutputBuffer
and JkInputStream to set correct outputbuffer size. Currenty I'm not  
port this back to tomcat 6.0.x!

- second use case: Test a post file upload
mod_jk don't send more then 8k at a fileupload request!

use case: - ( Sorry for the long description)

Send a http POST file upload

--
Request:

POST /fileupload/fileuploaddemo.jsp HTTP/1.1
Accept: */*
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Cookie: JSESSIONID=246F48F8E1C82B3EB7B800EEDA3256BB.node01
Referer: http://127.0.0.1:2090/fileupload/fileuploaddemo.htm
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de)  
AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3
Content-Length: 16832
Content-Type: multipart/form-data; boundary=----------0xKhTmLbOuNdArY
Connection: keep-alive
Host: 127.0.0.1:2090

------------0xKhTmLbOuNdArY
Content-Disposition: form-data; name="name"

16k.bin-5
------------0xKhTmLbOuNdArY
Content-Disposition: form-data; name="myimage"; filename="16k-5.bin"
Content-Type: application/macbinary

∏i}sÕå 94^~>às›7˚Ñ3à=µ˚≈aµÓ¥‹Ç1Î;A˛4Ô˚7ÿé{>+W¡/@ŒòΩƒn€;XP√nfi 
$çÈé!˘Ç∑ä[†|¡oHœsØ„Œ∑#E<§
Ì>Ï4Ñ‘¨GçOl‡∑Ã≥˙QA7fÈïéP∞ÚUnk£(X∆Qj‰®6Ód	∞èd"_<µü°|µ«Tªı;… 
ª.œ•Œ›iüfl⁄¨Û»´^§ÁÚZGG±Úò√'?;HÛ€Õ¬fl§ΩKÆ}drxwLXálzoçæ9— 
˜√Yt‡®ÇànÓÏJ´JÈ0∑ê≠2=B1§wt≠´›—	òà-9‘Ÿ√¶áÚÈXTµ^=AscËeCEîp— 
Ã,SÀ˙fiYã?∏"∂ûM.Ûi¸êƒõRìÊÏ·àO0ß$r¥ÛWé≈^xw>g'”‹‡ô]˙{ÕˆVıZ@ä}êPì¡*1 
{Ósôµà1ö*›@ÔóÅ_DNk∫„ÍüôJtpd∫2'éq"Ò≠îÙ®E’q˜ÒÕRπb≠·ß}ìR>!6. 
\V¿Y¿[cÁ~RÅ_TÛd0¢2mºY1}fi`5A†—{•Lúî¢ 
ÁO35∑bµJ‹¯–"∑ÂJkï7LWÄ,ôœÚŒ*¨äŸ2RÅe∞÷ã∞9Èê›Õ†‚/fi√då& 
·X®`cõÄê∫n‹(˙‚§ê…[–{ˇØTÓˇ-ƒ#J`mHwƒ¡#·ˇ∆ô!˝p™°6èÈØ* 
±LVç©”LÄîAmHvÀ√®%bÁ8ˆ^"IB›—[gÍ¿Ã/˜«˛	ih}ÿꈡxÔm’¶±˘ñ@â6Õ| 
ŸI]FƒÍæ9Âı≤ä§á;aÑ“'rŒ|˘k\Y:U∂–ú¡¥ëãCO›tËBzQ0Ñfi{ù˘ïóo®9˚ñ– 
dÉX’”òôÏq†ú›¿¯Ès¸·ËûÌWÎñM£{Ñ-¡ùm®YÑ0|y»èÚ(SµÑ˛ñ,tr‰Z©tÛ£ëµ⁄¥] 
ì.∂óÈπ:ÁS.ä0Z«{iQ&Õ9†ˇcØ·◊d§kÚG	WÜÇy˛fic4‚›]ºl@ÊÕ”òì„$4Êcuf…ö*
 >…
%ÙHbzw^÷+?Ä7êÀ2ó“\dûBÓáçÛf‘3( ([á˝b⁄⁄ä¯RtZ…⁄ô,
“	bÌ>ˆ∑w•t)bì¢ ◊êBÉNP~;ú„c†5éF˝d7c96D%√<¢éä…©Z—˚·¸æ6<û  
√˝˛zO·Ø98W{ Ñ!‡ÍpG[∑©cîTHÊü7Ëj¯ò ƒ•N•"›"¶L›tÄ:˝Œ8Ç 
$∞õŒ2üˆBT–Ú}É=Z™“®¶
·„€dÉ굧àÆLJHN°^>—ï#∑Ôfl˙–1Ä‹·ãµ≤à≥‚ÔÜ>7¿`⁄ç´êR¥ƒ∆’·M΄¡ßr~ˆ 
±Ú>ˆ°Er∏$Õûv`¸)„¿2mÃg\a?¨t◊ êΩwñœ°F—.-ñ¡k¥Ö¨ıGå€="b/è€∏dÕ◊ 
„5ÛÀu”%˜å]üÓä)¨>˜‚üór≤iGè»ımâØe¿é¬øòmªr©<?±•âÂñÊäë∞ïå¯"O¶¶o§¸– 
ƒ†ŸË‡›iflZëzÿ¿ ç'√+¨˘*Ÿ¸»§=⁄õ‡$G}T÷/πŸ˝†$°A8-„Vêfi≈…Ä¥x’7C߀M] 
˛âj=ºã÷C±|§:1w@U)AúéBÁz–v≥å« òÚneNít0ÏÅJS˙j∏Ï£öIg	RöAÖ0ã`¨ë 
+vTù¶4À⁄ظ¢°¨¥ùZs´Ô\ñ±¢≥ìÔ“`˘ºmLWˆ∏fi0E°˝Æ-C)•;	¨àÀˇ„ı¢æs~D6k ´‰ 
M"€Â/0ÚÑ∏n9`Khb™ÊÊ‹3ïOfiÍe? ôÏÇ_I[ªß 
£Ñ¿¿“Øflµ›Ö·∑¸ú·ÖVıR◊îp ÿi‹-ˆ¨¸'0QÛ∏Nz∂≠Q€oÓ–$ç{ØÉ
eùP^"œÚX˛`ÓxQ1µû)f˘;™¿sÔ√A>Ω£¡ˇ±Õî©NZñ⁄IUÌòl†¸\#‘∂çî¶fl”>™- 
˘Ïø'aË “!~=ã¥M?õ`ΩÁ‚e ÂÒBa3”¨Ï≤K”Á
˚M”ñ¯‚/çú˚’"˛%“˝ìÒ6N∫§–æ/a§$„ih∑ZøBfiw*;Ø≈H¬äûÕfiÊ …¢ 
S”lÑŒD™;j≠¿“Ø^aÜ&VÛJ˙‚Ö<c~a¸N‡[&fcvY	Ôm~ãæø÷¥0ÎÒxø 
€•ÜF®fiπ|{BTyT6£ØX¨ÍØÁ|È •Zã∞™Œ/¶Eâ‹U|ë≤°∂ ÑËmR‡ç<π√Z√ër4`ı% 
â0Ò∞sÚ‡)8›T±∫o–√©Ÿ˝ÄHΩ‡sܺ"À•ú≈•µËfcÌ≤=Túùûı%‰üxf61„µïnZÀyV 
‚7¢?^3˚lZu<VdzºBˆ<¥}€/i¡Vœvd€˚œLg˙Ŭ„lEØÊoc6K 
9vâà*3ªßNÈ"›(ÂXRÒ``ÿ˘Ω•Ÿ”d<»yL!á¥5@ൣ⒛®45Ô[ƒ≠áêöfië++OM% 
áØnΩt,x∆úêÑ"”ÍÌ^0LD#'F-˜[‹SíÜ{§˛˚Ó }{ô’ıjÍ}qñ),Dn¿><ìËÀX 
—nì¨'˚^Wâfl)±Æ˛U3µâü;B∑}¬2ñ Oóû£$ì^—Ì≥ùK‹≤®ÅÑ,.Úß] 
ÖN≤G«åCmC%:19¿Óö7tımg´lâ§Ñø^hÚwDOìÌ°_%Ñûd»G1bÒ,ç—$õ}aÛöQ=§æ≤7Ü 
[≠kÛŸÒ¥ùD}(∏7^∏~ãk$Ø?ıZGÁNü˘$ÿÂ0ı∆Hpiº±KÑ)Jx˙¢™ÁƒS¶Çàp—VƒX"Êë 
¥ã‡©Ú†‡ã∞n^çÔv36yn
)

== SNIP ==


== mod_jk log analyse: ===

a)Apache  -> JK_AJP13_FORWARD_REQUEST -> Tomcat )
jk_ajp_common.c (893): sending to ajp13 pos=4 len=450 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (893): 0000    12 34 01 BE 02 04 00 08 48 54 54 50 2F  
31 2E 31
- .4......HTTP/1.1
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_send_message::

b) only 8k are sent (Apache  -> DATA -> Tomcat )
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_send_request::jk_ajp_common.c
(1273): request body to send 16832 - request body to resend 0
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_read_into_msg_buff::jk_ajp_co
mmon.c (1098): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_read_fully_from_server::jk_aj
p_common.c (1052): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_read_into_msg_buff::jk_ajp_co
mmon.c (1135): exit
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (889): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (893): sending to ajp13 pos=4 len=8192 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (893): 0000    12 34 1F FC 1F FA 2D 2D 2D 2D 2D 2D 2D  
2D 2D 2D
- .4....----------

== max is 16 k ==

c) Tomcat answer please send more packet size max 16k (Apache  <-  
JK_AJP13_GET_BODY_CHUNK <- Tomcat )
Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_get_message::j
k_ajp_common.c (1029): received from ajp13 pos=0 len=3 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_get_message::j
k_ajp_common.c (1029): 0000    06 3F FA 00 00 00 00 00 00 00 00 00 00  
00 00 00
- .?..............
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_connection_tcp_get_message::j
k_ajp_common.c (1035): exit

d) but only 8k are sent again (Apache  -> DATA -> Tomcat )
...
k_ajp_common.c (1029): received from ajp13 pos=0 len=3 max=16384

[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_process_callback::jk_ajp_comm
on.c (1461): exit
[Tue Dec 12 13:09:57 2006] [5167:0000] [trace]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (889): enter
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (893): sending to ajp13 pos=4 len=8192 max=16384
[Tue Dec 12 13:09:57 2006] [5167:0000] [debug]  
ajp_connection_tcp_send_message::
jk_ajp_common.c (893): 0000    12 34 1F FC 1F FA FB F7 CE A6 2F AC 2B  
FF 23 42
- .4......../.+.#B

e) Tomcat answer, please send more with packet size 16k (Apache  <-  
JK_AJP13_GET_BODY_CHUNK <- Tomcat )
...
f) rest are send (Apache  -> DATA -> Tomcat )
...
g) tomcat response header and body are send
...
h) Tomcat send end response

OK, but why mod_jk don't use configured max packet size?

===

==== mod_jk 1.2.20 config

<IfModule !mod_jk.c>
   LoadModule jk_module "modules/mod_jk.so"
</IfModule>
JkShmFile "logs/mod_jk.shm"

JkLogFile "logs/mod_jk.log"
JkLogLevel trace

JKWorkerProperty worker.list=loadbalancer,jkstatus
JKWorkerProperty worker.node01.port=7309
JKWorkerProperty worker.node01.host=localhost
JKWorkerProperty worker.node01.type=ajp13
JKWorkerProperty worker.node01.max_packet_size=16384
JKWorkerProperty worker.loadbalancer.balance_workers=node01
JKWorkerProperty worker.loadbalancer.type=lb
JKWorkerProperty worker.jkstatus.type=status
JkMount /jkstatus jkstatus
JkMount /last* loadbalancer
JkMount /fileupload* loadbalancer

====

search at mod_jk source and found following hardcoded size cutter:
====

jk_ajp_common.c

L1444:
  case JK_AJP13_GET_BODY_CHUNK:
         {
             int len = (int)jk_b_get_int(msg);

             if (len < 0) {
                 len = 0;
             }
             if (len > AJP13_MAX_SEND_BODY_SZ) {
                 len = AJP13_MAX_SEND_BODY_SZ;

The size at tomcat SEND_BODY message are cut to default and not to  
worker max_paket_size

Why the first send body not use the worker max_packet_size:

L1341 ??
        if (ae->left_bytes_to_send > 0) {
             int len = ae->left_bytes_to_send;
             if (len > AJP13_MAX_SEND_BODY_SZ) {
                 len = AJP13_MAX_SEND_BODY_SZ;

Other fix length setting found at  L1101
    read_buf += AJP_HEADER_LEN; /* leave some space for the buffer  
headers */
     read_buf += AJP_HEADER_SZ_LEN;      /* leave some space for the  
read length */

     /* Pick the max size since we don't know the content_length */
     if (r->is_chunked && len == 0) {
         len = AJP13_MAX_SEND_BODY_SZ;
     }

Wrong or right?

Regards
Peter




Re: mod_jk 1.2.20 max_packet_size handling

Posted by Peter Rossbach <pr...@objektpark.de>.
Hi Mladen,

Am 12.12.2006 um 19:17 schrieb Mladen Turk:

> Peter Rossbach wrote:
>> Hi Rainer and Mladen,
>> I made the paketSize port to tomcat 5.5 tree. Now, I start some  
>> testing and ...
>>
>
> OK. Although it's not that important. It worked already via APR  
> connector.
>
Yes, but also I also have got the APR from tomcat 6.0.x to tomcat 5..5
>> - second use case: Test a post file upload
>> mod_jk don't send more then 8k at a fileupload request!
>>
>
> There is no need to send more then 8K. The only place
> where we need 8K+ is header packet.
> For post/reply the packet size is irrelevant.
>
Granded, but then the name max_packet_size/paket_size is wrong and I  
am not sure
the different packet size is irrelevant.

> Regards,
> Mladen.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: mod_jk 1.2.20 max_packet_size handling

Posted by Mladen Turk <mt...@apache.org>.
Peter Rossbach wrote:
> Hi Rainer and Mladen,
> 
> I made the paketSize port to tomcat 5.5 tree. Now, I start some testing 
> and ...
>

OK. Although it's not that important. It worked already via APR connector.

> 
> - second use case: Test a post file upload
> mod_jk don't send more then 8k at a fileupload request!
>

There is no need to send more then 8K. The only place
where we need 8K+ is header packet.
For post/reply the packet size is irrelevant.

Regards,
Mladen.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org