我的连接池工具似乎有问题。获取数据库连接时有很大的延迟。
我试图实现的是在发生此事件时从日志文件中获取所有案例。
相关的日志条目看起来像
...
2018-03-12 16:18:44,070 efault task-166 gine.jdbc.internal.LogicalConnectionImpl DEBUG Obtaining JDBC connection
...
2018-03-12 16:20:23,172 efault task-166 gine.jdbc.internal.LogicalConnectionImpl DEBUG Obtained JDBC connection
...
因此,如果出现“ DEBUG 获得 JDBC 连接”模式,则提取日期“ 2018-03-12 16:18:44,070 ”,当找到“ DEBUG 获得 JDBC 连接”模式时,提取其日期并比较两个日期。如果差异超过 2 秒,则记录。
我知道用一行代码解决它是相当复杂的,但是不编写程序就可以做到这一点吗?
尝试这个:
如果它适用于您的要求,将解释该命令。
我将使用下面的 awk 脚本来处理它。该脚本搜索“obtaining”和“obtained”字符串。典型的情况是先找到“obtaining”字符串,再找到“obtained”字符串;如果首先找到“获得”行,
d1
则将未设置或为零,因此不会报告。否则,我们提取日期的主要部分(在逗号之前),将其转换为 seconds-since-the-epoch,然后重新添加毫秒。该值保存到d1
.一旦看到“obtained”字符串,它的日期就会以相同的方式计算,然后我们检查差异;如果超过 2 秒,我们会报告它。无论哪种方式,我们然后重置
d1
以重新开始该过程。将以下内容保存到一个脚本中,命名为任何你想要的(也许是
alert-jdbc.awk
),然后使用awk -f alert-jdbc.awk < log-file-here
.该脚本需要 GNU 日期实用程序才能转换任意日期。