resin access log导致的锁问题一例

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

线上遇到的一个case,应用结构是nginx----->resin---java,其中nginx做lb,resin做为java的容器。在nginx层面做http code的监控,发现有4xx比例高的的报警:

wKiom1QF1YrS2pyTAAMlQYAH7oY528.jpg

分析nginx日志,发现是由于499比例高导致

1
2
xxx xxxxx - [29 /Oct/2012 :04:10:03 +0800]  "GET /GetConfiguration.jsp?peer_version=2.3.0.4779&peer_id=E00B3B81B458D7D5A3C2E2BD85865354 HTTP/1.0"  499 0  "-"  "-"  "-"  "-"  xxxxx:8080 " " - " " 0.001"
xxxxx xxxxx - [29 /Oct/2012 :04:10:03 +0800]  "GET /GetConfiguration.jsp?peer_version=2.3.0.4779&peer_id=E00B3B81B458D7D5A3C2E2BD85865354 HTTP/1.0"  499 0  "-"  "-"  "-"  "-"  "xxxx:8080"  "-"  "0.000"

499一般是由于后端响应超时造成,但是这里的499响应时间都在毫秒以内,证明不是超时导致,而是后端直接不能响应抛出。对于java应用来说会有两种情况,一是线程锁导致,另一个是堆栈导致。

使用jstack打印出堆栈分析,发现有类似下面的这种线程被锁:

1
2
3
4
5
6
7
8
9
10
11
12
"http-0.0.0.0:8080-65096$1864960835"  daemon prio= 10  tid= 0x000000004c169800  nid= 0x4bf8  waiting  for  monitor entry [ 0x0000000043e8e000 .. 0x0000000043e8ed10 ]
    java.lang.Thread.State: BLOCKED (on object monitor)
          at com.caucho.server.log.AccessLog.log(AccessLog.java: 345 )
          - waiting to lock < 0x00002aaab522a638 > (a java.lang.Object)
          at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java: 223 )
          at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java: 265 )
          at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java: 273 )
          at com.caucho.server.port.TcpConnection.run(TcpConnection.java: 682 )
          - locked < 0x00002aab3a6542f8 > (a java.lang.Object)
          at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java: 730 )
          at com.caucho.util.ThreadPool$Item.run(ThreadPool.java: 649 )
          at java.lang.Thread.run(Thread.java: 619 )

这其实是一个bug,在resin 3.1.9和3.1.11中日志翻转会遇到access log锁问题,导致同步锁不能正常释放线程被锁住。

bugid:

http://bugs.caucho.com/view.php?id=3509

http://bugs.caucho.com/view.php?id=4821

解决方法也比较简单:

1.升级resin到4.0.2以上的版本

2.如果不care resin的日志,可以diable掉记录日志的功能



本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1548047,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
小程序
【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
【小程序】报错:no such file or directory, access ‘wxfile://usr/miniprogramLog/log2‘
899 0
|
30天前
|
数据采集 机器学习/深度学习 数据挖掘
如何使用 Python 统计分析 access 日志?
【8月更文挑战第14天】如何使用 Python 统计分析 access 日志?
34 0
如何使用 Python 统计分析 access 日志?
|
4月前
|
安全 Linux 调度
【后台开发】TinyWebser学习笔记(4)定时器、日志系统(单例模式)、封装互斥锁信号量
【后台开发】TinyWebser学习笔记(4)定时器、日志系统(单例模式)、封装互斥锁信号量
24 1
|
10月前
|
Apache
系统找不到指定的路径。 : AH02291: Cannot access directory ‘D:/xp.cn/www/wwwroot/admin/PhpTest_10006/log/‘ for e
系统找不到指定的路径。 : AH02291: Cannot access directory ‘D:/xp.cn/www/wwwroot/admin/PhpTest_10006/log/‘ for e
78 0
|
JavaScript 应用服务中间件 BI
nginx access log满引发的一个问题
今天下午突然遇到一个问题: 报表直接进不去了,重启也没有生效。
294 0
|
监控 数据可视化 应用服务中间件
Nginx系列:用GoAccess实现可视化并实时监控access日志
Nginx系列:用GoAccess实现可视化并实时监控access日志
353 0
Nginx系列:用GoAccess实现可视化并实时监控access日志
|
SQL 运维 关系型数据库
slow log判定是否会加上锁等待时间?
slow log判定是否会加上锁等待时间?
198 0
|
SQL 存储 监控
Nginx Access Log 指标预聚合实践
Nginx 完成请求处理后会记录客户端请求信息到 access log。与业务请求数量成正比,access log 文件内容日积月累,占用大量磁盘的存储空间的同时,数据量增长也使分析 access log 变得困难。本文介绍一种预计算方案实现冷数据的存储优化以及分析效率提升。
547 0
Nginx Access Log 指标预聚合实践
|
SQL 关系型数据库 MySQL
MySQL的Slow_log如何记录SQL的MDL锁耗时
MySQL的Slow_log如何记录SQL的MDL锁耗时
1584 0
MySQL的Slow_log如何记录SQL的MDL锁耗时
|
监控 应用服务中间件 nginx