apache log的%D到底包含什么时间?
一.现象:
apache + mod_jk + jboss环境, jboss的处理时间和apache log中的处理时间总是相差很大,jboss的时间是用框架记录从request进入到请求结束的时间,对于一个特定的URL,时间基本在 100ms以内,可是apache log出来的%D大都在200ms以上,有的竟然离奇的是几百秒。
二.目的:
找出jboss的业务处理和apache log的处理时间差,如果一个正常的业务逻辑处理只需100ms,因为前置了apache却花费了200ms,说明
架构存在问题,浪费了一倍以上的时间。
三.分析:
最初怀疑是mod_jk与jboss之间通讯造成的,但测试后发现apache不加载jk自己的静态资源有时也莫名其妙地很长时间。
又怀疑是加载的module消耗了时间,但把所有的module都掉,现象还是存在。
详细看文档,就一句话:The time taken to serve the request, in microseconds.说明 %D的时间是“服务端处理时间”。
然后网上搜索相关资料,能找到的一篇文章(不具体说名称)的结论是:不包括请求发送的时间。
那么服务端处理请求的时间应该是所有请求被接受后开即处理到把响应发出去之前的这个时间,可以一个静态资源的读取不可能花
多少秒的。即使不在内存中缓存,也就是从磁盘上读这个文件然后输出。这个时间和log出来的%D相差太远。
解决疑难的万能之钥只有源码。read...................................
找到mod_log_config.c中:
apr_time_now()没有疑问,服务端逻辑处理结束不包括把响应内容发送到客户端的时间。
那么r->request_time是从什么时候算起的呢?
找到protocol.c ,发现:
这个时间是从请求的第一行被分析(读取到)后开始计时的,注意,无论这个第一行是否合法,都会给 r->request_time 赋值。
if (rv != APR_SUCCESS) {
r->request_time = apr_time_now();
......
return 0;
}
...........
r->request_time = apr_time_now();
所以%D实际是包含了大多数请求发送的时间,大多数的意思是在第一行被读出前网络传输时间是不计在内的,但是如果第一行被读到,比如已经读了"GET /path HTTP/1.1\r\n"的内容,下面的内容在传输时网络状况很差,那么这些传输时间都会被计算在内。
四.验证:
写一个socket和apache通讯,测试一个正常的连接时间,在本机测试以最大程度减少网络延迟。
这段代码循环100次,apache log的%D时间都在340μs左右,jboss的时间在300μs左右。而这段代码在客户端运行的平时时间在550μs左右.注意这个时间都是μs的单位。
修改上面的代码:
或者在建立socket以后,将sleep放在out建立后的第一行,模拟在第一个head行被服务端读到前的网络延时,得到的结果和网络第一种正常情况基本一致。除了每次请求的正常波动,平均值几乎没有变化。
再次修改代码:
将sleep放在第一个头域被发送后的任何一行之间,这个时间差明显看了来了。因为上面服务端处理的340和客户端运行的550的时间单位都是μs,而此处sleep的时间是ms,所以反映到服务端立即看出了明显的差值,JBOSS的业务处理时间没有什么变化,但apache log的%D一下子变成了100700μs左右,除了客户端网络传输的100000μs,“另外的”时间也增加了一倍,这就是延迟放大,当网络延迟后,处理请求的线程在等待地网络数据和处理其它逻辑之间的切换等开销随之加大。基于同样的道理客户端的平均运行时间也变成了101200μs左右,除掉sleep的100000μs,因为sleep本身带来的线程功能的消耗了大量的时间。
五.结论:apache log %D的意思是服务端处理时间,但实际包含了除第一个头域之前的网络传输时间之外的所有客户端传输时间。这句话说起来非常拗口,说白了就是从头域的第一行被读取后开始计时,包括请求的后续内容网络传输时间在内的整个服务端处理时间。
分享到:
相关推荐
《ChatGPT是如何工作的...以及为何它有效(2023)》这本书深入浅出地探讨了人工智能领域的一项新突破——ChatGPT的工作原理。ChatGPT是一个能够以人类水平生成自然语言的AI系统,其出现让业界大为震惊,甚至连它的创建...
Students can learn to write so that the professor will know what they mean and, more important, professors can learn to write so that the rest of the world will know what they mean." -- Howard S....
Learn the latest on ultrasound, MRI, CT, patient safety, dose reduction, radiation protection, and more, in a time-friendly format with brief, bulleted text and abundant high-quality images....
从提供的文件内容来看,主要涉及的是如何解决Android Studio在安装后运行时出现的两种常见错误:“dose not point to a valid jvm installation”和“Internal error...”。错误的具体内容和解决步骤如下: 1. ...
D: For the wind-heat invasion, we usually recommend a combination of rest, staying hydrated, and taking herbal medicines or supplements that help to clear the pathogen. In Western medicine, you may be...
④The kinds of interpersonal violence that women are exposed to tend to be in domestic situations, by, unfortunately, parents or other family members, and they tend not to be one-shot deals. The wear...
Some early birds run to eat the worms in the sun."中的"ar"和"oo"音,例如在"early"和"birds"中,要求舌头中部接近口腔中央,发音饱满。 3. **Back Vowels(后元音)**: "12. The car which Mark borrowed from...
同时,区分了询问外貌、品质和喜好的三种表达方式:What do/dose sb. look like?(问外貌),What be sb. like?(问品质),What do/does sb. like?(问喜好)。 2. "chat":动词,表示聊天。搭配短语有"chat with ...
- 在打电话的场景中,询问能否与某人通话通常用"May I speak to...?",所以第二题的正确选项是A。 - 对于感谢的回答,"You're welcome"是最常见的礼貌用语,选项A正确。 - "Can"后面接动词原形,所以第四题的正确...
1. **Getting the Most Out of the Default Shell (HACK 1):** This section teaches readers how to effectively use the default shell in BSD, including advanced features and shortcuts that can ...
python库。 资源全名:dose-1.2.1-py2.py3-none-any.whl
However, the main focus of the book is concerned with de- tailed derivations of reconstruction algorithms in D and modern D cone-beam systems. A thorough analysis of CT artifacts and a discussion...
1_dose_escalation_simulations.R.r
放射治疗中的外部光子束剂量计算是医学物理领域的一个核心课题,主要涉及肿瘤治疗中射线能量分布的精确预测和优化。在这个过程中,理解和掌握相关的IT技术至关重要,因为它们直接影响到治疗的效果和患者的安全。...
Does your Rails code suffer from bloat, brittleness, or ... Do what the doctor ordered to make your applications feel all better. Side effects may include better code, fewer bugs, and happier developers.
Conway (familiar to many in the Perl community) offers 256 guidelines on the art of coding to help you write better Perl code--in fact, the best Perl code you possibly can. The guidelines cover code ...