首先,当某些时候,在一段程序或者借助第三方软件进行程序协助的时候,在性能的优化,以及程序bug的排除上面,可能会想知道该程序执行的进程被调度到了哪一个CPU内核进行工作,从而可以推断是否是受限于硬件还是受限于程序。下面有四种方法,查看进程具体运行的位置:

第一种:

taskset命令:

首先使用:ps -ef 查看系统具体进程情况:

我们想知道上面的chrome浏览器具体CPU内核情况:

使用如下命令:taskset -c -p <pid>

接下来输入:

taskset -c -p 6460

可以得到如下(本机是CPU核数为4核):

这是因为chrome进程并没有明确的被固定在某个CPU内核上,所以告诉我们,该进程可能被运行在0~3任何一个CPU内核之上。

如果,某个进程被明确固定了在某个CPU内核上,则会输出:

pid 6460's current affinity list: 2 (假设)

输出这个表明,该进程被固定在CPU内核2上

上面的第一种方法,使用taskset命令,对于进程没有固定在具体CPU内核上的时候,是无法得出该进程此时处于哪个CPU内核,我们可以采取第二种方法:

第二种:

使用命令: ps -o pid, psr, comm -p <pid>

该命令可以明确的告诉你线程或者进程此时所在CPU内核的 ID。

请看实例:

输入:

ps -o pid, psr, comm -p 6460

可以看到:进程的PID为6460此时在CPU内核2上面运行。(注意是“此时”,因为该进程没有被固定,所以会随着系统的调度而发生变化)

在第二种方法中,我们仅仅是可以查看该进程你查看时刻处于哪个CPU内核中,无法实时的看到随着系统调度,CPU内核的变化情况。如果需要看到实时的变化情况,可以使用第三种方法:

第三种:

使用命令:top

top 命令也可以显示 CPU 被分配给哪个进程。首先,在top 命令中使用“P”选项。然后按“f”键,显示中会出现 “Last used CPU” 列。

请看实例:

top -p 6460

我们可以监视到随着时间和系统调度的改变,CPU的自动分配情况是怎么样的

接下来,我们有时候需要查看CPU内核以及系统内存或者交换区的使用情况来对整体的负载进行判断,我们可以使用第四种方法:

第四种:

使用命令:htop

这个命令可以详细的列出计算机的各个CPU内核的使用百分比,以及内存的使用百分比,swap区域的使用百分比

请看实例:

输入:

htop

注意:这里看到上面CPU内核的使用情况是从 1~4,这个和上面三种方法从0~3是一样的,只是对应的起始编号不同。

获取Linux进程运行在哪个CPU内核上面的方法的更多相关文章

  1. Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?

    问题:我有个 Linux 进程运行在多核处理器系统上.怎样才能找出哪个 CPU 内核正在运行该进程? 当你在 多核 NUMA 处理器上运 行需要较高性能的 HPC(高性能计算)程序或非常消耗网络资源的 ...

  2. Linux 进程、线程运行在指定CPU核上

    /******************************************************************************** * Linux 进程.线程运行在指定 ...

  3. Linux -- 进程或线程独占CPU

    如果想让特定进程或线程独占某一或某些CPU,我们需要做三件事. 一,隔离CPU,避免其它线程run在被隔离的CPU上. 二,绑定所有的interrupts到非隔离的CPU上,避免被隔离的CPU收到in ...

  4. linux进程、线程与cpu的亲和性(affinity)

    参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...

  5. Linux 进程一直占用单核CPU分析

    pidstat 1信息

  6. kali linux (Raspberry Pi 3b) 更新失败 出现上面的问题

    Invalid signature for Kali Linux repositories : “The following signatures were invalid: EXPKEYSIG ED ...

  7. 获取Linux系统运行情况信息

    代码: #include <stdio.h> #include <unistd.h> /* usleep() */ #include <stdlib.h> #inc ...

  8. 远程批量获取Linux和Windos操作系统版本(内核)

    在不登录远程主机的情况下,可以查看远程主机的服务器操作系统版本(内核). 脚本执行前提: 1.拷贝check_snmp到脚本执行的主机中或在此主机中安装nagios; 2.保持list.txt中只有一 ...

  9. 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息

    直接在cmd窗口上输入 adb shell后,再输入dumpsys activity activities,可以看到所有的activity以及相关栈状态

随机推荐

  1. R12_专题知识总结提炼-AR模块

    应收模块简介 应收模块是用来为企业提供应收款管理的模块. 当企业销售一笔商品或者发生其他影响收入和现金的业务的时候,需要在应收模块记账. 本文档以R12为例,11i可参考,只针对简单业务情况考虑,将应 ...

  2. Mybatis分页插件

    mybatis配置 <!-- mybatis分页插件 --> <bean id="pagehelper" class="com.github.pageh ...

  3. iOS7——UIControlEventTouchDown延迟响应问题

    问题描述 在iOS7下开发,真机调试时,UIButton的其他事件响应都正常,但是UIControlEventTouchDown事件响应会延迟,而且不同响应区域发生的延时情况不同,有时延迟1s以后响应 ...

  4. RichEdit 追加 RTF

    下面实现追加RTF 到 RichEdit 的功能其本质是:EM_STREAMIN 消息,详细查看 MSDN//--------------------------------------------- ...

  5. c++中resize函数怎么用

    resize(),设置大小(size);reserve(),设置容量(capacity);size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存.打个比方: ...

  6. Begin :SWIFT 基本语法

    国内介绍IOS书籍大多是很陈旧的代码, 2014年Apple发布了Swift语言, 毫无疑问Swift是一个强大的语言, 但是纵观国内的IOS现状,大家大多已经习惯了了OC, OC能解决的问题谁会想到 ...

  7. Java 名词

    Plain Ordinary Java Object    pojo  简单java对象 Constant   常量 Business Object   BO  业务对象 Framework  框架

  8. mysql - 缺失范围和连续范围

    初始化数据 # 创建表 DROP TABLE IF EXISTS g; CREATE TABLE g( a INT )ENGINE=INNODB; # 初始化数据 ; ; ; ; ; ; ; ; ; ...

  9. ubuntu源码安装node7+

    在官网上下载了node的tar.xz文件(node7.3.0),安装分为两步:1.解压  2.安装 解压也分成两步,首先用xz -d xxx.tar.xz解压为xxx.tar,然后用tar -xvf ...

  10. Android Dex文件格式(一)

    dex是Android平台上(Dalvik虚拟机)的可执行文件, 相当于Windows平台中的exe文件, 每个Apk安装包中都有dex文件, 里面包含了该app的所有源码, 通过反编译工具可以获取到 ...