数据库线程池引发的系统磁盘100%问题

某系统因数据库线程池未配置有效性验证,凌晨3:00出现磁盘使用率100%的告警。问题由quartz定时任务在数据库连接异常时持续尝试并输出大量日志引起。解决方案是设置testOnBorrow为true,确保连接有效性。
摘要由CSDN通过智能技术生成

数据库线程池引发的系统磁盘100%问题

平台某系统凌晨3:00突发告警,系统磁盘使用率超过门限,很快达到100%,主系统功能不可用,整个集群出现同样的问题,运维同事紧急介入,压缩日志,重启系统,系统回复正常

问题描述

究竟是什么问题引发的磁盘使用率100%呢?经过排查,基本定位为日志文件导致,日志把系统磁盘给打爆了,为什么日志会突然间暴增了?而近期系统没有发版,而且凌晨3:00,系统使用率并不高?系统bug?被黑产攻击?爬虫?带着这些问题,我们来一步步分析。

分析日志

既然是日志文件导致的,按我们就分析一下日志文件,看看问题出现在哪里,首先看下系统监控,确定一下时间点:
这里写图片描述

从图中可以看到大概3:00左右系统出现问题,从日志分析看是quartz定时器连接数据库出现了问题
这里写图片描述
为什么quartz连接不上数据库会导致输出大量日志呢?这里我们根据日志输出的异常信息仔细分析一下,参考上图红框里面的栈信息,quartz连接数据库的操作是由QuartzSchedulerThread线程来发起的,我们去代码中一探究竟,流程如下:
QuartzSchedulerThread->acquireNextTriggers->executeInNonManagedTXLock->rollbackConnection

/**
     * <p>
     * The main processing loop of the <code>QuartzSchedulerThread</code>.
     * </p>
     */
    @Override
    public void run() {
        boolean lastAcquireFailed = false;

        while (!halted.get()) {
            try {
                // check if we're supposed to pause...
                synchronized (sigLock) {
                    while (paused && !halted.get()) {
                        try {
                            // wait until togglePause(false) is called...
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值