linux下如何查看多核负载情况【转】
最近服务器负载超荷,CPU的单个荷使用率到了百分之八九十,内存占用超大,让给检测性能,不给源码,只给一个+ -g编译生成的执行文件,Fuck!!!
1, 在linux下载了valgrind,使用valgrind 命令分别对内存使用 及 suricata kill 完后,去初始化结束进程后的内存泄漏中,和源码相关的泄露大数据块进行了研究定位;
2,观察了 /proc/ 下对应的进程号 的内存使用,各线程栈使用,全局变量和静态变量的使用 进行了简要分析;(具体情况参照之前转载的文章)
3,当然做上部分工作前,分析了top -1 ,及看主进程中各线程中的运行情况;看了各核的使用情况;
linux下如何查看多核负载情况
1. Linux下,如何看每个CPU的使用率:
#top -d 1
(此时会显示以1s的频率刷新系统负载显示,可以看到总的CPU的负载情况,以及占CPU最高的进程id,进程名字等信息)
(切换按下数字1,则可以在显示多个CPU和总CPU中切换)
之后按下数字1. 则显示多个CPU (top后按1也一样)
Cpu0 : 1.0%us, 3.0%sy, 0.0%ni, 96.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
这里对us,sy,ni,id,wa,hi,si,st进行分别说明:
us 列显示了用户模式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
ni 列显示了用户进程空间内改变过优先级的进程占用CPU百分比。
id 列显示了cpu处在空闲状态的时间百分比。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
hi
si
st
2. 在Linux下,如何确认是多核或多CPU:
#cat /proc/cpuinfo
如果有多个类似以下的项目,则为多核或多CPU:
processor : 0
......
processor : 1
3. 如何察看某个进程在哪个CPU上运行:
#top -d 1
之后按下f.进入top Current Fields设置页面:
选中:j: P = Last used cpu (SMP)
则多了一项:P 显示此进程使用哪个CPU。
Sam经过试验发现:同一个进程,在不同时刻,会使用不同CPU Core.这应该是Linux Kernel SMP处理的。
4. 配置Linux Kernel使之支持多Core:
内核配置期间必须启用 CONFIG_SMP 选项,以使内核感知 SMP。
Processor type and features ---> Symmetric multi-processing support
察看当前Linux Kernel是否支持(或者使用)SMP
#uname -a
5. Kernel 2.6的SMP负载平衡:
在 SMP 系统中创建任务时,这些任务都被放到一个给定的 CPU 运行队列中。通常来说,我们无法知道一个任务何时是短期存在的,何时需要长期运行。因此,最初任务到 CPU 的分配可能并不理想。
为了在 CPU 之间维护任务负载的均衡,任务可以重新进行分发:将任务从负载重的 CPU 上移动到负载轻的 CPU 上。Linux 2.6 版本的调度器使用负载均衡(load balancing) 提供了这种功能。每隔 200ms,处理器都会检查 CPU 的负载是否不均衡;如果不均衡,处理器就会在 CPU 之间进行一次任务均衡操作。
这个过程的一点负面影响是新 CPU 的缓存对于迁移过来的任务来说是冷的(需要将数据读入缓存中)。
记住 CPU 缓存是一个本地(片上)内存,提供了比系统内存更快的访问能力。如果一个任务是在某个 CPU 上执行的,与这个任务有关的数据都会被放到这个 CPU 的本地缓存中,这就称为热的。如果对于某个任务来说,CPU 的本地缓存中没有任何数据,那么这个缓存就称为冷的。
不幸的是,保持 CPU 繁忙会出现 CPU 缓存对于迁移过来的任务为冷的情况。
6. 应用程序如何利用多Core :
开发人员可将可并行的代码写入线程,而这些线程会被SMP操作系统安排并发运行。
另外,Sam设想,对于必须顺序执行的代码。可以将其分为多个节点,每个节点为一个thread.并在节点间放置channel.节点间形如流水线。这样也可以大大增强CPU利用率。
例如:
游戏可以分为3个节点。
1.接受外部信息,声称数据 (1ms)
2.利用数据,物理运算(3ms)
3.将物理运算的结果展示出来。(2ms)
如果线性编程,整个流程需要6ms.
但如果将每个节点作为一个thread。但thread间又同步执行。则整个流程只需要3ms.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenggong2dm/archive/2011/01/12/6131052.aspx
linux下如何查看多核负载情况【转】的更多相关文章
- Linux下通过uptime判断负载情况
[root@localhost ~]# uptime 18:34:12 up 5:30, 1 user, load average: 0.00, 0.01, 0.05 load average后面的三 ...
- 【案例分析】Linux下怎样查看port占用情况
作者:zhanhailiang 日期:2014-11-08 基于express写一个測试server代码例如以下,可是执行失败,报"listen EADDRINUSE".字面上理解 ...
- 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等
一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...
- 在linux下,查看一个运行中的程序, 占用了多少内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...
- Linux下周期性查看GPU状态
Linux下周期性查看GPU状态 NVIDIA自带了nvidia-smi命令来查看GPU的使用情况 了解一下watch命令 $ whatis watch watch (1) - execute a p ...
- Linux下如何查看版本信息
Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a (Linux查看版本当前操作系统内核信息) L ...
- Linux下怎么查看当前系统的版本
Linux下怎么查看当前系统的版本: uname -r 功能说明:uname用来获取电脑和操作系统的相关信息. 语 法:uname [-amnrsvpio][--help][--version] ...
- linux下如何查看mysql、apache是否安装,并卸载
--linux下如何查看mysql.apache是否安装,并卸载? http://blog.163.com/dengxiuhua126@126/blog/static/1186077720137311 ...
- Linux 下实时查看日志
Linux 下实时查看日志 cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /v ...
随机推荐
- python3 文件及文件夹路径相关
1. #返回当前文件所在的目录 currentDir = path.dirname(__file__) # __file__ 为当前文件 2.获得某个路径的父级目录: parent_path = os ...
- 【Spark】Spark-foreachRDD需要注意的问题
Spark-foreachRDD需要注意的问题 dstream.foreachRDD_百度搜索 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中 - 吾心光明 ...
- springboot 中使用事务
直接在service 层的方法上加上@Transactional 注解就ok. 注意事项: 1.Spring 基于注解的声明式事物 @Transactional 默认情况下只会对运行期异常(java. ...
- MySQL8.0手动安装心得。
https://dev.mysql.com/downloads/mysql/ mysql从5.7一下子跳跃到了8.0,其中的改变还是很大,有点这里就不说了,小伙伴们自己去百度了解一下,这里重点说一下, ...
- 15款不容错过的前端开发Javascript和css类库 - 2017版本~
前端的JS和CSS类库日新月异, 在今天这篇介绍中,我们将精挑细选15款超棒的JS/CSS类库, 希望大家在开发过程中会觉得有帮助~ Core UI 基于Bootstrap4的一套UI类库, Core ...
- C语言编程流程
大家都知道,写程序大体步骤为:1.用编辑器编写源代码,如.c文件.2.用编译器编译代码生成目标文件,如.o.3.用链接器连接目标代码生成可执行文件,如.exe.但如果源文件太多,一个一个编译时就会特 ...
- Array、ArrayList、List、IEnumerable、for、foreach应用
一.Array 类 (System) 声明数组(本身也是一种变量,要先声明再使用) 1.声明数组的语法,数组大小由长度绝定: 数据类型 [] 数组名: 如: string[] student; //字 ...
- uni/微信小程序 - 使用外部字体
字体图标/字体仅支持网络css路径(也就是不支持本地路径) 参考于:https://blog.csdn.net/u013451157/article/details/79825740
- Windows中snmputil.exe工具的使用
一.检查windows 系统是否安装了 snmp 组件.可以在 cmd 中输入"net start snmp" 就可以出现显示信息了 二. snmputil,就是程序名拉,呵呵. ...
- SQLServer中查询表结构(表主键 、列说明、列数据类型、所有表名)的Sql语句
SQLServer中查询表结构(表主键 .列说明.列数据类型.所有表名)的Sql语句 1.查询数据库中的所有表名称: SELECT name FROM SysObjects Where XType=' ...