1

我在生产环境中遇到了我的流程问题,我也能够在我的开发环境中模拟这个问题。

该进程有 5 个线程,其中线程 3 和 4 是高度活跃的。Thread 4是对消息进行排队的生产者,Thread 3也是对消息进行出队的消费者。两个线程都是数据库密集型的。

问题

当进程运行时,top输出显示此进程和 oninit(Informix) 的 cpu 使用率很高。Cpu 负载始终高于 4,这是危险的。这台机器只有 1 个 CPU 和 2 个虚拟 CPU。

所有数据库查询都以committed read隔离级别运行

分析

  1. ps -eLo pid,ppid,lwp,nlwp,osz,rss,ruser,pcpu,stime,etime,args | grep <processname>

此输出显示线程 3 和 4 的 CPU 使用率很高

  1. onstat -g act -r 2

此输出显示频繁的线程 3 和 4 查询。

考虑到以上所有事实,有什么办法可以减少 oninit & process 的 cpu 使用率和 cpu 负载

4

1 回答 1

0

从表面上看,系统运行良好。您有两个数据库密集型线程,数据服务器可以很好地提供这些线程。两个线程显然都没有被挂断;数据服务器能够跟上工作量。如果您没有看到等待 I/O 或重要的分页活动等。如果您降低线程 3 和 4 的活动级别,您应该也会看到oninit不那么忙。

如果您担心数据库活动的数量,则需要查看线程对服务器要求的 SQL。是否准备好声明?统计数据是最新的吗?你能简化查询吗?您可以组合查询(在许多情况下与简化相反)?线程每秒请求多少个查询?

您确定 CPU 平均负载为 4 是个问题吗?我的 Mac(2.3 GHz Intel Core i7,16 GiB RAM)正在运行 8 个 BOINC 后台进程和几个 DBMS 和一个 Web 浏览器等,平均负载大致在 4 到 10 之间变化。它的表现非常好(但它与您的机器不同)。

于 2012-11-24T05:27:45.023 回答