【问题标题】:Tuning Performance for Java on Linux and MariaDB在 Linux 和 MariaDB 上调整 Java 的性能
【发布时间】:2014-03-20 17:01:58
【问题描述】:

我构建了一个 java 程序,它连接到本地服务器并提取信息,然后将其放入 mysql 数据库(使用 jdbc 和准备好的语句)。该程序还创建了许多线程来执行此操作。在我的 Mac OSX 上的编程环境中,它使用单个 2.3 GHz 处理器以极快的速度运行。我现在已经把它移到了 VPS,安装了 mariaDB,VPS 有 3gb 的内存和 2 个 2.4ghz 处理器,但它的运行速度比我的 mac 慢。我能做些什么来解决这个问题?我在 linux 上安装了替代 JVM,我使用了 visualVM 来优化它。我似乎无法弄清楚为什么在我的 Mac 上创建这些线程的速度如此之快,而在此 VPS 上运行其他程序时却非常慢。

任何帮助或指导都会有很大帮助!

【问题讨论】:

  • 我看到 VPS 的拖累是由于 I/O 等待时间长。我不知道如何解决这个问题,但也许可以与主机讨论,如果那是困扰您的 VPS 的原因。运行“top”并查看标题上的 0.0%wa 值。它应该是非常低的数字,如果健康时不是 0.0。无论应用程序是否运行,我都会这样做。
  • 在两台机器上运行单线程和多线程 Java 基准测试,以确保 VPS 确实具有更高的性能。
  • @MichaelFord 它在 30% 范围内,应用程序正在运行。 MariaDB 的 I/O 等待时间不是吗?所有这些 java 程序都是数据库和其他程序之间的桥梁,因此它不会向 I/O 写入任何内容。 mariadb 在这种环境中运行良好。
  • @AlexeiKaigorodov 是 VisualVM 进行基准测试的好方法吗?
  • 只需运行 SPECjvm2008 或其他基准测试。站点en.wikipedia.org/wiki/Java_performance 有很多有用的链接。

标签: java mysql linux multithreading mariadb


【解决方案1】:

听起来你在等待来自 db 的 io。当 db 位于单独的机器上并且必须通过网络时,您和 db 之间的延迟会更高。

可能的解决方案...

将数据库放在与正在使用它的应用程序相同的服务器上,(可能会增加盒子的内存以适应。

假设你可以得到一个适当大小的盒子,那应该可以解决它,(如果没有,那么此时建议优化 mysql/mariadb 的配置)

如果您因为尝试水平扩展而需要将其保留在单独的服务器上,那么请考虑以较大的批次处理数据,而不是进行小型的单个 sql 查询,这将导致以少量的方式分配到数据库的往返行程时间。

【讨论】:

  • 它们在同一个盒子上。我已将我的 VPS 升级到具有更好 IO 控制的更好的 VPS。我在 mariadb 中使用了 innodb,所以我将该大小增加到 2gbs,并将池实例从 1 更改为 8。这对我在 mariadb 上可以做的其他事情有帮助吗?
猜你喜欢
  • 2021-09-13
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 2011-02-06
相关资源
最近更新 更多