我在生产环境中遇到了我的流程问题,我也能够在我的开发环境中模拟这个问题。
该进程有 5 个线程,其中线程 3 和 4 是高度活跃的。Thread 4
是对消息进行排队的生产者,Thread 3
也是对消息进行出队的消费者。两个线程都是数据库密集型的。
问题
当进程运行时,top
输出显示此进程和 oninit(Informix) 的 cpu 使用率很高。Cpu 负载始终高于 4,这是危险的。这台机器只有 1 个 CPU 和 2 个虚拟 CPU。
所有数据库查询都以committed read
隔离级别运行
分析
ps -eLo pid,ppid,lwp,nlwp,osz,rss,ruser,pcpu,stime,etime,args | grep <processname>
此输出显示线程 3 和 4 的 CPU 使用率很高
onstat -g act -r 2
此输出显示频繁的线程 3 和 4 查询。
考虑到以上所有事实,有什么办法可以减少 oninit & process 的 cpu 使用率和 cpu 负载