nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来找出站点中处理时间较长的请求, 这些请求是造成服务器高负载的很大根源. 日志记录之后,在使用perl脚本分析日志,即可知道哪些请求需要修正.

1. 模块安装

nginx第三方模块安装方法,我们ttlsa.com已经说过很多次了,我这边不在重复了。
配置参数

 
1
2
./configure --prefix=/usr/local/nginx-1.4.1 --with-http_stub_status_module \
--add-module=../ngx_http_log_request_speed

2. 指令log_request_speed

log_request_speed_filter
语法: log_request_speed_filter [on|off]
配置段: n/a
context: location, server, http
启动或禁用模块

log_request_speed_filter_timeout
语法: log_request_speed_filter_timeout [num sec]
默认: 5秒
配置段: location, server, http
这边并不是真正意义的超时,而是说当请求超过这边给定的时间,将会记录到nginx错误日志中. 默认值是5000微秒(5秒),如果一个请求小于5秒,这个请求不会被记录到日志中,但是如果超过5秒,那请求将会被记录到nginx的错误日志中

3. 使用实例

3.1 nginx配置

 
1
2
3
4
5
http{
      log_request_speed_filter on;
      log_request_speed_filter_timeout 3;
      ...
}

错误日志中记录的慢请求如下

nginx慢请求日志

3.2 日志分析

 
1
2
3
4
5
6
7
cd /usr/local/nginx-1.4.1/logs
wget http://wiki.nginx.org/images/a/a8/Log_Analyzer.tar.gz
tar -xzvf Log_Analyzer.tar.gz
cd request_speed_log_analyzer
# cat ../error.log | grep 'process request'| ./analyzer.pl -r
POST /wp-admin/admin-ajax.php HTTP/1.1 --- avg ms: 1182, value count: 2
GET /shmb/1145.html HTTP/1.1 --- avg ms: 2976, value count: 1 <--- THE WINNER

从日志中,我们发现这边有2条请求比较慢,最慢的是/shmb/1145.html ,而且还标示“THE WINNER”,作者你赢了。很幽默。

3.3 分析脚本语法

 
1
2
3
4
5
# ./analyzer.pl -h
-h : this help message # 显示帮助信息
-u : group by upstream # 按upstream分组
-o : group by host # 按主机分组
-r : group by request # 按请求分组,推荐这个

4. nginx测试版本

目前作者只在0.6.35和0.7.64下测试,不保证其他环境下可以使用。我当前的测试版本是1.4.1,目前使用正常,在使用前请大家先测试一下。

5. 结束语

首先很感谢作者写的这个简单实用的nginx插件,这个插件的目的不仅仅是记录请求的响应时间,而且是用来找出响应慢的请求。如果你的服务器上有大量的站点,或者大量的程序文件,但是访问量不高,负载却很高,你想找出是哪个请求慢,我想这个插件非常适合你。

参考地址
ngx_http_log_request_speed下载地址:http://wiki.nginx.org/images/7/78/Ngx_http_log_request_speed.tar.gz
ngx_http_log_request_speed脚本地址:http://wiki.nginx.org/images/a/a8/Log_Analyzer.tar.gz

最新文章

  1. 配置mysql允许远程连接的方法
  2. jsp\struts1.2\struts2 中文件上传(转)
  3. Bluetooth LMP介绍
  4. JDK JVM
  5. 使用Eclipse构建Maven项目 (转)
  6. Hdu1076(n个闰年后的年份)
  7. Bootstrap dropdown 使用
  8. CentOS下载及版本选择-CentOS LiveCD、LiveDVD和BinDVD区别
  9. Git的简单的基本使用
  10. 【技术】关于安卓使用禁用服务(或者是MYANDROIDTOOLS里面的禁用服务)后卡在开机页面的(或者是卡在各种页面的)
  11. C#之Excel操作
  12. 栅栏(fence)
  13. HTTP协议GET HEAD简单介绍
  14. WPF RadioButton的绑定
  15. 框架、颜色、颜色名、脚本、字符实体、URL、速查列表
  16. [转]调试利器-SSH隧道
  17. vue 关闭浏览器
  18. iOS 10 应用内跳转到系统设置
  19. 利用transform的bug使fixed相对于父级定位
  20. win10 ubuntu双系统安装后无法引导进入ubuntu

热门文章

  1. ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题
  2. python的模块
  3. v-for的显示过滤/排序结果
  4. tomcat8080端口占用解决办法
  5. 聊聊我这两年都在忙什么,IT技术男如何转型!
  6. gdb-pada调试实例
  7. C#基础-委托与事件
  8. Cloudera Manager 安装 CDH5
  9. css3 媒体查询的学习。
  10. 裸机——SD卡