【问题标题】:CPU usage spikes play framework java mysqlCPU使用率峰值播放框架java mysql
【发布时间】:2019-12-18 05:42:29
【问题描述】:

后端应用是在play框架中开发的。 连接到 2 个不同的数据库 mysql 和 oracle。

2 到 3 小时后,CPU 消耗达到 100%。

在部署 6 个月后,我找不到相同问题的确切根本原因。但是在 Windows 事件查看器中,我发现 MYsql 出现以下错误

WindowsEventViewer 日志

Aborted connection 472 to db: 'mydb' user: 'root' host: 'localhost' (写入通信数据包时出错)有关更多信息,请参阅帮助和支持中心http://www.mysql.com

在 mysql 的 WINSERVER.err 中找到的日志

2019-12-18T05:07:35.110436Z 472 [注意] 中止连接 472 到 db: “mydb”用户:“root”主机:“localhost”(写入时出错 通讯包)

我在整个应用程序中使用的应用程序开始时创建一个数据库连接。

我的数据库配置

db.mydb.hikaricp.minimumIdle=2 db.mydb.hikaricp.maximumPoolSize=4 db.mydb.hikaricp.idleTimeout=600000 #### 10 分钟 db.mydb.hikaricp.maxLifetime=1800000 #### 30 分钟 db.mydb.hikaricp.cachePrepStmts=true db.mydb.hikaricp.prepStmtCacheSize=250 db.mydb.hikaricp.prepStmtCacheSqlLimit=2048 db.mydb.hikaricp.useServerPrepStmts=true db.mydb.hikaricp.useLocalSessionState=true db.mydb.hikaricp.rewriteBatchedStatements=true db.mydb.hikaricp.cacheResultSetMetadata=true db.mydb.hikaricp.cacheServerConfiguration=true db.mydb.hikaricp.elideSetAutoCommits=true db.mydb.hikaricp.maintainTimeStats=false

【问题讨论】:

标签: java mysql playframework


【解决方案1】:

我认为你有内存泄漏。

是的,我知道,这不是一个好消息:您的应用程序创建了无法删除的对象,因为它们被其他对象引用,所以堆满了,垃圾收集器开始更频繁地运行,但没有成功删除任何东西......这么高GC 活动通常会对 CPU 使用率产生负面影响。

论文验证

您有多种方法来测试您的内存使用情况,它们会根据问题是否发生而有所不同。

问题还在继续

如果您可以通过 ssh 访问您的生产环境,您可以运行以下命令(作为超级用户):

jstat -gc <pid java> 15000 10

获得这样的东西:

通过这种方式,您将在垃圾收集器活动的最后 15 秒采集 10 个样本;如果 FGC(来自 jvm 启动的 Full Garage Collection 事件的数量)频率为每秒 1 次或类似的情况,则您有内存泄漏!请记住,通常运行 10 个 YGC(Young Garbage Collection:gc 的轻量级版本)您只有 1 个 FGC(此数字仅供参考)。

或者,如果您可以在生产环境中使用堆监视器(VisualVM 或类似工具)

在这种情况下,您可以有这样的图表:

您可以进行堆转储并对其进行分析以验证最存在的对象。

问题还没有发生

再次,使用堆监视器 (VisualVM),您可以在应用程序中使用一段时间,然后强制运行完整垃圾收集器并验证您自己的对象(应用程序的对象)的数量是否显着减少或归零在每个段落。

【讨论】:

    【解决方案2】:

    MySQL 中的高 CPU 通常通过使用更好的索引和/或重新编写查询来解决。请参阅this 以打开慢日志并提供有关要修复的查询/查询的信息。

    【讨论】:

    • 高 CPU 消耗发生在我连接到 mysql 的 java 进程中。不过我会检查索引。
    • 我已经截断了表中的大部分数据并启动了我的应用程序。还是一样的场景。
    • @Cloy - 寻找工具来找出 Java 花费大部分时间的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多