linux sys cpu,关于sys CPU usage 100%问题的分析

关于sys CPU usage 100%问题的分析

最近一个客户抱怨他的核心EBS数据库出现性能问题。这是一个10.2.0.3的数据库,

运行在Red Hat Enterprise Linux Server release 5.5 (Linux x86-64)操作系统上。

根据客户描述,由于需要维护UPS,他们重启了数据库,结果重启数据库后他们发现只要他们的应用

开始连接数据库,那么主机的sys CPU使用率就会变成100%, 但是user CPU使用率几乎是0.

而且只要停掉监听或者应用不开启新session连接数据库,这个问题就会消失。

如下是问题发生期间的vmstat输出,可见cpu中的sys(倒数第4列)几乎100%, CPU Run Queue (第1列)

非常高,而此时free memory还有20G(第4列),看来内存很充裕。

SNAP_INTERVAL 15

CPU_COUNT 32

zzz ***Fri Dec 2 17:05:03 CST 2016

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

48  0      0 22026868 213392 37138888    0    0    21    31   13   39  6  8 86  0  0

44  1      0 21968452 213392 37138900    0    0     0   360 1093  537  8 92  0  0  0

44  1      0 21941632 213392 37139028    0    0     0   288 1080  371  9 91  0  0  0

......

zzz ***Fri Dec 2 17:10:12 CST 2016

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

121  2      0 21495944 218356 37142412    0    0    21    31   13   39  6  9 85  0  0

122  4      0 21486192 218356 37142432    0    0     0   308  119  753  7 93  0  0  0

121  2      0 21478868 218364 37142424    0    0     0   592   97  517  5 95  0  0  0

首先我看了一遍客户提供的AWR,发现DB相当空闲,虽然CPU time占据了91.2,但是总的CPU Time

在119分钟的采样中只有18345秒(305分钟),相对于客户32个CPU Core来说不是个问题。

Snap Id Snap Time Sessions Cursors/Session

Begin Snap: 38119 02-Dec-16 16:00:28 255 63.2

End Snap: 38121 02-Dec-16 18:00:18 193 48.7<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取Linux系统的CPU使用率可以通过读取/proc/stat文件来获取,然后使用简单的数学公式计算CPU使用率。以下是获取CPU使用率的C++代码示例: ``` #include <iostream> #include <fstream> #include <sstream> #include <thread> #include <chrono> using namespace std; double GetCPULoad() { ifstream proc_stat("/proc/stat"); string line; getline(proc_stat, line); istringstream iss(line); string cpu; long long user, nice, sys, idle, iowait, irq, softirq, steal, guest, guest_nice; iss >> cpu >> user >> nice >> sys >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice; long long PrevIdle = idle + iowait; long long PrevNonIdle = user + nice + sys + irq + softirq + steal; long long PrevTotal = PrevIdle + PrevNonIdle; this_thread::sleep_for(chrono::milliseconds(100)); // sleep for a short time to get the current CPU usage proc_stat.seekg(0); getline(proc_stat, line); istringstream iss2(line); iss2 >> cpu >> user >> nice >> sys >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice; long long Idle = idle + iowait; long long NonIdle = user + nice + sys + irq + softirq + steal; long long Total = Idle + NonIdle; // calculate CPU usage percentage double CPU_Percentage = (double)(Total - PrevTotal) / (double)(Total - PrevTotal + PrevIdle - Idle); return CPU_Percentage; } int main() { // print CPU usage percentage every second while (true) { cout << "CPU usage: " << GetCPULoad() * 100 << "%" << endl; this_thread::sleep_for(chrono::seconds(1)); } return 0; } ``` 该代码会每秒钟输出一次CPU使用率。你可以根据需要修改输出内容和时间间隔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值