Performance 应用程序未全速运行?

Performance 应用程序未全速运行?,performance,io,cpu,disk,Performance,Io,Cpu,Disk,我有以下情况: 机器1:接收来自外部的消息并对其进行处理(通过 Java应用程序)。对于处理,它依赖于数据库(在计算机上) (二) 机器2:Oracle数据库 作为性能指标,我通常关注每次处理的消息的价值 现在,让我困惑的是:这两台机器都没有“全速”运转。如果我查看典型参数(CPU利用率、CPU负载、I/O带宽等),两台机器看起来都不够用 我所期望的是,一台机器或一个与性能相关的参数会限制总体处理速度。因为我无法观察到这一点,所以我希望有更高的消息处理率 有什么想法会限制整体性能吗?瓶颈是什

我有以下情况:

  • 机器1:接收来自外部的消息并对其进行处理(通过 Java应用程序)。对于处理,它依赖于数据库(在计算机上) (二)
  • 机器2:Oracle数据库
作为性能指标,我通常关注每次处理的消息的价值

现在,让我困惑的是:这两台机器都没有“全速”运转。如果我查看典型参数(CPU利用率、CPU负载、I/O带宽等),两台机器看起来都不够用

我所期望的是,一台机器或一个与性能相关的参数会限制总体处理速度。因为我无法观察到这一点,所以我希望有更高的消息处理率

有什么想法会限制整体性能吗?瓶颈是什么

以下是工作负载期间的一些关键值:

机器1:

  • CPU平均负载:0.75
  • CPU利用率:系统12%,用户13%,等待5%
  • 磁盘吞吐量:1 MB/s(写入),几乎没有读取
  • 平均测试程序集(由iostat报告):200
  • 网络:500kb/s输入,300kb/s输出,1600个数据包/秒输入,1600个数据包/秒输出
机器2:

  • CPU平均负载:0.25
  • CPU利用率:系统3%,用户15%,等待17%
  • 磁盘吞吐量:4.5 MB/s(写入),3.5 MB/s(读取)
  • 平均tps(由iostat报告):190(极短峰值至1000-1500)
  • 网络:输入250kb/s,输出800kb/s,输入1100个数据包,输出1100个数据包
所以对我来说,所有的价值观似乎都不受任何限制


PS:当然,对于测试,消息队列总是满的,这样两台机器都有足够的工作要做。

要找到瓶颈,通常还需要在应用程序内部进行测量。这意味着分析java应用程序代码以及Oracle内部可能发生的情况


好消息是,您已经排除了至少一些可能的硬件瓶颈。

要找到瓶颈,通常还需要在应用程序内部进行测量。这意味着分析java应用程序代码以及Oracle内部可能发生的情况


好消息是,您已经排除了至少一些可能的硬件瓶颈。

我会理解,如果机器1使用100%的CPU,那么下一个明显的调查将包括应用程序-但至少100%会告诉我应用程序“一直”在工作。关键是:如果CPU处于25%(并且I/O不是一个明显的问题):是什么阻止应用程序以4倍的速度运行?我不确定应用程序分析如何能给我一个答案。一个明显的可能性是,应用程序是作为单线程应用程序编写的,其中该线程100%的时间都在一个CPU核上工作,但您的机器有四个CPU核,其中三个完全空闲,因为应用程序代码是如何编写的。这只是一个例子。我想我可以排除他的原因:我通过top(显示所有CPU内核)观察两台机器上的CPU负载:机器1上的主进程的值约为1核20(单线程,2核可用),机器2上的oracle进程的值约为35(峰值高达50,4核可用)。因此,在这两台机器上,没有一台是单核的。我可以理解,如果机器1使用100%的CPU,那么下一个明显的调查将包括应用程序——但至少100%会告诉我,应用程序“一直”在工作。关键是:如果CPU处于25%(并且I/O不是一个明显的问题):是什么阻止应用程序以4倍的速度运行?我不确定应用程序分析如何能给我一个答案。一个明显的可能性是,应用程序是作为单线程应用程序编写的,其中该线程100%的时间都在一个CPU核上工作,但您的机器有四个CPU核,其中三个完全空闲,因为应用程序代码是如何编写的。这只是一个例子。我想我可以排除他的原因:我通过top(显示所有CPU内核)观察两台机器上的CPU负载:机器1上的主进程的值约为1核20(单线程,2核可用),机器2上的oracle进程的值约为35(峰值高达50,4核可用)。因此,在这两台机器上,没有一台是单核完全工作的。一般来说,任何程序都会花一部分时间运行CPU,另一部分时间等待I/O(这只是一个不同的CPU)。每次消息数是一个很好的指标。利用率百分比不是。性能差可能反映在低利用率或高利用率上。正如@Mahol25所说,你需要查看应用程序的内部,找到缓慢的来源。+一个写得很好的问题。一般来说,任何程序都会花一部分时间运行CPU,另一部分时间等待I/O(这只是一个不同的CPU)。每次消息数是一个很好的指标。利用率百分比不是。性能差可能反映在低利用率或高利用率上。正如@Mahol25所说,你需要查看应用程序内部,以找到缓慢的来源。