我有一个运行两个进程的系统——MySQL 和 Java
我发现 20-30% 的时间都花在了 %system 上。我四处寻找,试图找到一种方法来确定进程之间的系统时间平衡,即是 MySQL 进程占用了 90% 的系统时间,还是 Java 占用了?
I/O 负载较低,IOSTAT 中的利用率为 1-2%。我们没有进行任何网络流量。所以我想知道这是否是上下文切换。MySQL 进程有大约 400 个线程,而 java 进程有 3000 个线程。我希望能够测量/证明这些线程数是问题所在,而不仅仅是猜测。
这是一个批处理过程,因此我们正积极尝试以尽可能快的速度运行,最大限度地利用 CPU 并减少开销。
答案1
从 pastebin 来看,你似乎在进行交换,因此系统时间将是你的 Java 应用程序的内核交换页面。如果你无法接受这种使用情况,请降低 Java 占用的 RAM 量或增加服务器上的 RAM 量。
我不认为上下文切换起着重要作用,因为虽然我确实看到它ksoftirqd
正在运行(这通常意味着在某一时刻有很多中断),但与您的应用程序相比,它的 CPU 时间非常低。