从 Ubuntu 18.04 升级到 20.04 后,Java 应用正在使用 <1% cpu
Java app is using <1% cpu after upgrade from Ubuntu 18.04 to 20.04
我正在开发 Java / MySQL 应用程序,批处理的测试运行在 Ubuntu 18.04 上需要 3-4 秒。
我昨晚升级到 Ubuntu 20.04,并保留相同的 mysql conf 文件,现在相同的应用程序需要 1 分钟 45-47 秒!!!
6.27user 0.41system 1:45.53elapsed 6%CPU (0avgtext+0avgdata 168724maxresident)k
0inputs+384outputs (0major+42056minor)pagefaults 0swaps
我注意到 lscpu 服务器现在的平均最小频率为 运行。我尝试将“acpi=ht”添加到 /etc/default/grub,然后重新启动机器以关闭电源管理,但处理器仍然 运行 处于低频状态,可能是频率提升不起作用。
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 44
Model name: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Stepping: 2
Frequency boost: enabled
CPU MHz: 1599.592
CPU max MHz: 2401.0000
CPU min MHz: 1600.0000
BogoMIPS: 4799.75
Virtualization: VT-x
L1d cache: 256 KiB
L1i cache: 256 KiB
L2 cache: 2 MiB
L3 cache: 24 MiB
使用 mysqltuner 检查服务器的 InnoDB 指标一切正常,所以这似乎与 CPU 设置/OS 节流或 Java 配置/代码问题。
-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 8
[OK] InnoDB File per table is activated
[OK] InnoDB buffer pool / data size: 9.0G/2.6G
[OK] Ratio InnoDB log file size / InnoDB Buffer pool size: 1.0G * 2/9.0G should be equal 25%
[OK] InnoDB buffer pool instances: 9
[--] Number of InnoDB Buffer Pool Chunk : 72 for 9 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances
[OK] InnoDB Read buffer efficiency: 99.90% (2901594 hits/ 2904524 total)
[!!] InnoDB Write Log efficiency: 75.47% (19033 hits/ 25219 total)
[OK] InnoDB log waits: 0.00% (0 waits / 6186 writes)
运行 top while the app is 运行 表明 Java 在启动后仅使用 <1%cpu 的使用率。对于批处理,理想情况下它会使用所有可用的处理能力。
2113 mysql 20 0 25.7g 2.7g 36264 S 4.3 11.6 0:12.35 mysqld
353 root 20 0 0 0 0 S 2.7 0.0 0:02.99 md0_raid5
244 root 0 -20 0 0 0 I 0.7 0.0 0:00.98 kworker/10:1H-kblockd
248 root 0 -20 0 0 0 I 0.7 0.0 0:00.07 kworker/8:1H-kblockd
399 root 20 0 0 0 0 D 0.7 0.0 0:00.61 jbd2/md0-8
2372 bias 20 0 5597164 180592 27784 S 0.7 0.7 0:07.54 java
运行压力我弄满了cpu用法
4654 user 20 0 3856 100 0 R 100.0 0.0 0:13.88 stress
4643 user 20 0 3856 100 0 R 100.0 0.0 0:13.82 stress
4645 user 20 0 134932 3272 272 R 100.0 0.0 0:13.84 stress
4646 user 20 0 3856 100 0 R 100.0 0.0 0:13.80 stress
maven pom.xml 文件使用 OS 为 mysql 服务器 8.0.21
安装的相同 mysql 连接器版本
39 <dependency>
40 <groupId>mysql</groupId>
41 <artifactId>mysql-connector-java</artifactId>
42 <version>8.0.21</version>
43 </dependency>
java 应用程序是否受到 OS 或 JVM 的限制?
20.04 和 mysql 或 java 是否存在已知问题?
MySQL JDBC 驱动程序默认行为在更新 OS 时明显改变。
之前的驱动程序关闭了 Java 批量更新的事务自动提交 - 在数据连接上手动 adding/running setAutoCommit(false)
将 运行 时间恢复正常(显然这是 1000 次插入的 运行ning 原子事务。
这是一个很好的例子,说明为什么人们应该防御性编码并添加有意的代码,即使代码中使用的是默认值 behavior/configuration - 默认值可以而且将会改变!
https://coderanch.com/t/299833/databases/Batch-update-setAutoCommit-false
我正在开发 Java / MySQL 应用程序,批处理的测试运行在 Ubuntu 18.04 上需要 3-4 秒。
我昨晚升级到 Ubuntu 20.04,并保留相同的 mysql conf 文件,现在相同的应用程序需要 1 分钟 45-47 秒!!!
6.27user 0.41system 1:45.53elapsed 6%CPU (0avgtext+0avgdata 168724maxresident)k
0inputs+384outputs (0major+42056minor)pagefaults 0swaps
我注意到 lscpu 服务器现在的平均最小频率为 运行。我尝试将“acpi=ht”添加到 /etc/default/grub,然后重新启动机器以关闭电源管理,但处理器仍然 运行 处于低频状态,可能是频率提升不起作用。
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 44
Model name: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Stepping: 2
Frequency boost: enabled
CPU MHz: 1599.592
CPU max MHz: 2401.0000
CPU min MHz: 1600.0000
BogoMIPS: 4799.75
Virtualization: VT-x
L1d cache: 256 KiB
L1i cache: 256 KiB
L2 cache: 2 MiB
L3 cache: 24 MiB
使用 mysqltuner 检查服务器的 InnoDB 指标一切正常,所以这似乎与 CPU 设置/OS 节流或 Java 配置/代码问题。
-------- InnoDB Metrics ----------------------------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 8
[OK] InnoDB File per table is activated
[OK] InnoDB buffer pool / data size: 9.0G/2.6G
[OK] Ratio InnoDB log file size / InnoDB Buffer pool size: 1.0G * 2/9.0G should be equal 25%
[OK] InnoDB buffer pool instances: 9
[--] Number of InnoDB Buffer Pool Chunk : 72 for 9 Buffer Pool Instance(s)
[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances
[OK] InnoDB Read buffer efficiency: 99.90% (2901594 hits/ 2904524 total)
[!!] InnoDB Write Log efficiency: 75.47% (19033 hits/ 25219 total)
[OK] InnoDB log waits: 0.00% (0 waits / 6186 writes)
运行 top while the app is 运行 表明 Java 在启动后仅使用 <1%cpu 的使用率。对于批处理,理想情况下它会使用所有可用的处理能力。
2113 mysql 20 0 25.7g 2.7g 36264 S 4.3 11.6 0:12.35 mysqld
353 root 20 0 0 0 0 S 2.7 0.0 0:02.99 md0_raid5
244 root 0 -20 0 0 0 I 0.7 0.0 0:00.98 kworker/10:1H-kblockd
248 root 0 -20 0 0 0 I 0.7 0.0 0:00.07 kworker/8:1H-kblockd
399 root 20 0 0 0 0 D 0.7 0.0 0:00.61 jbd2/md0-8
2372 bias 20 0 5597164 180592 27784 S 0.7 0.7 0:07.54 java
运行压力我弄满了cpu用法
4654 user 20 0 3856 100 0 R 100.0 0.0 0:13.88 stress
4643 user 20 0 3856 100 0 R 100.0 0.0 0:13.82 stress
4645 user 20 0 134932 3272 272 R 100.0 0.0 0:13.84 stress
4646 user 20 0 3856 100 0 R 100.0 0.0 0:13.80 stress
maven pom.xml 文件使用 OS 为 mysql 服务器 8.0.21
安装的相同 mysql 连接器版本 39 <dependency>
40 <groupId>mysql</groupId>
41 <artifactId>mysql-connector-java</artifactId>
42 <version>8.0.21</version>
43 </dependency>
java 应用程序是否受到 OS 或 JVM 的限制?
20.04 和 mysql 或 java 是否存在已知问题?
MySQL JDBC 驱动程序默认行为在更新 OS 时明显改变。
之前的驱动程序关闭了 Java 批量更新的事务自动提交 - 在数据连接上手动 adding/running setAutoCommit(false)
将 运行 时间恢复正常(显然这是 1000 次插入的 运行ning 原子事务。
这是一个很好的例子,说明为什么人们应该防御性编码并添加有意的代码,即使代码中使用的是默认值 behavior/configuration - 默认值可以而且将会改变!
https://coderanch.com/t/299833/databases/Batch-update-setAutoCommit-false