linux系统性能监控与优化(2)–cpu

cpu scheduler负责调度两种资源:线程和中断 按优先级从高到低: 1)中断:设备告诉内核它们已经处理完成:如网卡发送完成了一个packet或是硬盘完成了一个io请求。 2)内核进程: 3)用户进程:

## 1. context switches:上下文切换

大多数的处理器在同一时刻只能运行一个进程,在多核处理器中,linux内核将每一个core当作一个独立的处理器。 一个内核可以同时运行50~50000个进程。如果只有一个cpu,内核必须负责高度和平衡这些进程。 每个线程将会分配一个时间片,直到这个线程的时间片用完,或是被更高优先级的线程抢占,它才会被重新放回cpu队列。切换线程的过程就是context switch。 每进行一次context switch,就要花费一些资源来将处理CPU寄存器和加入cpu队列。context switch越高,则内核调度的工作负担越大。

## 2.run queue

每个cpu都有一个运行队列。线程,要么在sleep状态(阻塞并等待IO),要么在运行状态。运行队列越长,则等待cpu处理这个线程的时间越长。 load就是用来描述运行队列的。它的值等于当前正在处理的线程+运行队列里面的线程。 比如当前系统核数是2,有两个线程正在执行行,还有4个线程在运行队列里面,那么它的load=2+4

## 3.cpu utilizaion

CPU的利用率。包含: user time: 用户空间的使用时间 system time: 内核空间的使用时间 wait io: 等待IO的时间(阻塞并等待IO) idle: 空闲时间

## 4.cpu性能监控

正常情况下的值: run queues: 每个处理器的run queue长度要<=3 cpu利用率: 56%-70%的user time 30%-35%的system time 0%-5%的idle time context switches:这个值与cpu利用率相关

## 5.cpu性能监控相关工具

vmstat,mpstat:

## 6.性能排查实例

实例1:

高的中断数量,少的上下文切换数量,说明是单个进程在访问硬件设备。 user time消耗了85%的时间,并且上下文切换少说明是可能是单个应用造成的。 实例2:

上下文切换大于中断,说明上下文切换花费的时间过多。 wa过多,表示是在等待IO。 可能是因为大量线程等待IO,需要将线程切换出去。

实例3: CPU0,CPU1正在处理cpu密集型的进程 CPU2空闲 CPU3处理内核和其它系统函数

ps -psr可以看到哪些进程在哪个核心运行 ps -eo pid,ni,pri,pcpu,psr,comm

## 7.总结:

1)每个核的run queue <=3 2)cpu利用率:用户空间(70%)内核空间(30%) 3)如果内核空间战用过多,很可能是负荷过重,内核花太多的资源在进行优先级调度 4)running CPU bound process(绑定CPU) always get penalized while I/O process are rewarded;?

来源链接:http://www.trueeyu.com/?p=1749 网摘文章,如有问题,请联系我们

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏情情说

git分支管理和工作流规范:具体规范

前一篇介绍了 git相关的概念,我们可以查看文件的状态,在各个状态之间进行切换,可以创建和合并分支,通过rebase还可以整理自己的提交历史。通过这些命令和操作...

4136
来自专栏web编程技术分享

【php增删改查实例】第二十五节 - 在main.php中显示头像

1853
来自专栏前端vue

编写接口连接并查询数据库数据(二)

安装测试工具postman 不想下载软件的话可以用谷歌插件postman 这个东西是测试用的,不需要的可以不下载

8421
来自专栏云计算教程系列

如何在CentOS 7上将ngx_pagespeed添加到Nginx

ngx_pagespeed,或者pagespeed,是一个Nginx模块,旨在通过精简资源的规模来缩短客户端浏览器加载它所需的时间,从而自动优化您的网站。如果您...

1700
来自专栏云计算教程系列

如何在FreeBSD 10.1上安装MongoDB

MongoDB是一个免费的开源NoSQL数据库。它是当今Web应用程序中最常用的数据库之一,因为它在数据库模式设计中提供了高性能,可伸缩性和大量灵活性。在本教程...

1570
来自专栏刺客博客

Linux下使用mysqldump进行数据库备份恢复

mysqldump -uroot -proot  --databases data >1.sql

7182
来自专栏木子昭的博客

pm2快速部署Django项目

推荐使用npm安装pm2(安装nodejs之后, npm就自动安装好了) nodejs安装包下载地址

2051
来自专栏云计算教程系列

如何在Ubuntu上找到Redis日志

日志对于Redis安装的故障排除至关重要。你可能会问自己“我的Redis在哪里登录?” 或者“Redis在Ubuntu 14.04上存储日志文件的位置是什么?”

8963
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Linux,Nginx,MySQL,以及PHP(LNMP)堆栈

LNMP软件堆栈是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩写词,带有Nginx Web服务器。后端数据存储在...

1604
来自专栏电光石火

如何让nginx显示文件夹目录

1. 如何让nginx显示文件夹目录 vi /etc/nginx/conf.d/default.conf 添加如下内容: location / ...

20910

扫码关注云+社区

领取腾讯云代金券