【问题标题】:High cpu usage by process/informix进程/informix 的 CPU 使用率高
【发布时间】:2012-11-24 04:26:22
【问题描述】:

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

该进程有 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 负载

【问题讨论】:

    标签: process load cpu informix


    【解决方案1】:

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

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

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

    【讨论】:

    • 我的机器只有 1 个 cpu,我从各种来源了解到,对于单个 cpu 机器来说,理想的 cpu 负载是 1。
    • 是否存在可衡量的性能问题?是否存在可测量的内存短缺(这会触发分页/交换的 I/O 活动)? CPU负载平均是唯一的故障迹象吗?同一台机器上还有其他问题吗?
    • 是的,机器只有 4GB 内存,因此机器变慢了。此外,如果其他进程开始工作,这将成为额外的开销。
    • 因此,您需要确定工作负载是什么。有没有办法降低线程中数据库密集型活动的强度?您能否将工作转移到服务器中,可能使用存储过程甚至 UDR,从而减少客户端线程(生产者和消费者)与服务器之间所需的通信?这些线程正在执行什么查询?它们有多少,有多大/硬/坏?您是否使用 SET EXPLAIN 来监控活动的数量和成本?
    • 所有查询都是非常简单的基于索引的查询。我已经检查了他们的费用。所有成本都为 1。将隔离级别更改为脏读而不是提交读有什么用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多