【案例】RAID卡写策略改变引发的问题
一 现象描述
开发反馈某产品的agent 的进程hang在某些线程上,查看日志,agent master 累积很多未处理的消息队列。 在17:00 – 21:00 之间,有一定程度的写入量低峰,猜测可能是写入数据库变慢了,不过从目前得到的信息来看无法完全确定。
"pool-10-thread-12" prio=10 tid=0x000000005f36d000 nid=0x1d81 runnable [0x00000000441de000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
.......
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
- locked <0x00002aaab6da9758> (a com.mysql.jdbc.util.ReadAheadInputStream)
.....
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
- locked <0x00002aaab6da9b30> (a java.lang.Object)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
.......
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:619)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:866)
.......
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
.......
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714)
at java.lang.Thread.run(Thread.java:619)
二 问题分析
业务代码层面: 查看进程堆栈发现,用于处理 handler 的线程池全部耗尽,并且都在处理数据库的操作 ,导致 agent后续上报的监控数据或者心跳都不能及时被 master接受,agent 也就被hang住!
数据库层面:检查数据库服务端的max_connections 为1024 远大于应用连接池配置的16。
分析到这里,简单来看只要加大应用程序的连接池线程数即可!但是思考一下,为什么3个多月运行平稳,反而现在出现异常?agent 等待数据被处理,说明涉及到数据库相关操作处理速度缓慢,而一般响应慢,有以下原因:
1 sql程序不够优化,需要调整索引结构或者应用访问数据库方式,比如增加缓存。
2 os 磁盘IO异常,导致访问数据慢。
对于 本例 应用为写入型insert 居多,而无优化空间。到服务器上查看IO使用率:{数据}
avg-cpu: %user %nice %system %iowait %steal %idle
14.31 0.00 4.82 19.67 0.00 61.20
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.02 143.19 18.47 199.18 1487.19 2673.67 38.23 435.77 3.55 3.22 99.5
%util 已经跑满,r/s 为17 。
我们数据库服务器的配置为 12块的300G 的SAS 盘做RAID10,最大可以支撑3k-5k tps。
root@rac1 # megacli -LDInfo -Lall -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Disk: 0 (Target Id: 0)
Name:
RAID Level: Primary-1, Secondary-0, RAID Level Qualifier-0
....
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Access Policy: Read/Write
Disk Cache Policy: Disabled
查看RAID 卡的日志表明,磁盘的io策略由于RAID卡充放电的原因由WB改为WT。
root@rac1#megacli -FwTermLog dsply -aALL
11/08/14 3:36:58: prCallback: PR completed for pd=0a
11/08/14 3:36:58: PR cycle complete
11/08/14 3:36:58: EVT#14842-11/03/12 3:36:58: 35=Patrol Read complete
11/08/14 3:36:58: Next PR scheduled to start at 11/10/12 3:01:59
11/08/14 0:48:04: EVT#14843-11/04/12 0:48:04: 44=Time established as 11/04/12 0:48:04; (25714971 seconds since power on)
11/08/14 15:30:13: EVT#14844-11/05/12 15:30:13: 195=BBU disabled; changing WB virtual disks to WT ---问题的原因
11/08/14 15:30:13: Change in current cache property detected for LD : 0!
11/08/14 15:30:13: EVT#14845-11/05/12 15:30:13: 54=Policy change on VD 00/0 to [ID=00,dcp=0d,ccp=0c,ap=0,dc=0,dbgi=0,S=0|0] from [ID=00,dcp=0d,ccp=0d,ap=0,dc=0,dbgi=0,S=0|0]
抽丝剥茧之后,明显是磁盘raid 卡充电将磁盘的写策略有write back 修改为write through ,io性能急剧下降导致应用层的线程等待问题。
三 拓展
介绍一点 RAID 卡知识
RAID卡都有写cache(Battery Backed Write Cache),写cache对IO性能的提升非常明显,因为掉电会丢失数据,所以必须由电池提供支持。电池会定期充放电,一般为90天左右,当发现电量低于某个阀值时,会将写cache策略从writeback置为writethrough,相当于写cache会失效,这时如果系统有大量的IO操作,可能会明显感觉到IO响应速度变慢,cpu 队列堆积系统load 飙高。
【案例】RAID卡写策略改变引发的问题相关推荐
- Linux查看MegaSAS raid卡缓存策略
查看MegaSAS RAID卡的缓存策略 [root@localhost ~]# MegaCli -LDInfo -Lall -aALLAdapter 0 -- Virtual Drive Infor ...
- 跟我学Linux系列1:正确认识和使用一块RAID卡都需要掌握Linux服务器系统配件选型的哪些知识
1.存储器的层次结构知识 我们从上往下说.操作系统中的存储器构成了一个金字塔,越往上的存储器速度越快,但是价格也越贵,所以也就越小.为了解决高速的处理器和低速的存储器之间的矛盾,上一层的存储器作为下一 ...
- raid卡的读写策略
影响 RAID卡性能的因素很多,其中可调因素主要有 RAID 卡缓存( CACHE )大小.写策略( WRITE POLICY ).读策略( READ POLICY ).条带的大小( STRIPE S ...
- MegaSAS RAID卡 BBU Learn Cycle周期的影响
背景 最近遇到有些带MegaSAS RAID卡的服务器,在业务高峰时突然IO负载飚升得很高,IO性能急剧下降,查了日志及各种设置最后才发现是RAID卡的Cache写策略由WriteBack变成Writ ...
- raid 物理盘缓存状态_服务器raid卡、磁盘缓存的配置策略
最近遇到不少因服务器异常断电,导致文件系统元数据等被破坏的问题,究其原因是磁盘缓存没有关闭. 不再重复码字了,直接贴图: 所以带raid卡.磁盘服务器环境的推荐配置为: 1 商用环境,RAID一定要有 ...
- RAID卡原理与设置
RAID卡有自己的CPU,Cache Memory,通过集成或借用主板上的 SCSI 控制器来管理硬盘,可以称之为一个智能化的设备. RAID卡的分类一般根据集成的SCSI 控制器来划分.如果没 ...
- linux raid卡缓存,RAID卡的缓存与磁盘自带的缓存的关系
RAID卡的缓存与磁盘自带的缓存的关系 RAID卡是否有(启用)缓存对"随机读写"性能有巨大的影响.中高端的RAID卡都有缓存(价格也高). 那么RAID卡的缓存与磁盘自带的缓存是 ...
- 服务器raid卡装虚拟机,DELLR730服务器阵列卡配置、VMware安装、WIN2008安装.docx
DELLR730服务器阵列卡配置.VMware安装.WIN2008安装 DELL R730服务器安装服务器阵列卡配置.虚拟服务器(VMware)安装.WIN2008服务器系统安装对RAID进行操作很可 ...
- 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题
转载自 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题 供稿 | Hadoop Team 编辑 | 顾欣怡 本文3058字,预计阅读时间10分钟 导读 eBay的Hadoop集群 ...
最新文章
- Yeslab安全实验室CCNP Security PPT到货
- ajax_异步交互-get/post方式
- tomcat(10)安全性
- php源码查找替换,php 替换模板中的 PHP源码标签字符方法
- NOI入门级:数据结构之线性表
- 学习之法 —— 套路
- AD、DHCP、DNS概念整理
- 禁止国外IP连接服务器
- 一分钟教你制作个人文字头像
- WordPress快速增加百度收录,加快网站内容抓取
- SpringBoot+FreeMarker+flying-saucer-pdf实现PDF预览、分页需求
- 【人工智能 AI】机器学习快速入门教程(Google)
- 任正非在持股员工代表会上讲:我的家人永不会进入接班人序列
- 24段魔尺,可以折出哪些精美图案
- virtualBox安装centos7并实现宿主机、虚拟机、外网三网互通
- flutter在IOS上显示英文
- 计算机毕业设计php的美食网站(源码+系统+mysql数据库+Lw文档)
- Servlet从服务器下载文件 步骤+代码
- 子集生成 增量构造法 位向量法 二进制法
- 前百度员工,现 Google 员工爆料:百度对比Google有量级差距
热门文章
- Android方法调用实体类的值,React Native调用Android原生方法和传值
- php数组交集 效率,PHP数组交集的优化
- php spss,spss数据分析的一般步骤
- java inputtools_Java后台开发常用工具类
- reportviewer控件mysql_reportviewer控件下载
- 一时技痒 不用模拟第一印象的构造 通过三个观察得来的规律解决N^2个往返接力问题...
- 定义任务打印gradle下载的jar包位置
- NTRIP/ SUPL
- oracle 客户端监听文件配置
- 10.6 ip:网络配置工具