首先,当某些时候,在一段程序或者借助第三方软件进行程序协助的时候,在性能的优化,以及程序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. Eclipse编程时的快捷键总结

    " alt + / " 快捷键是代码补全功能 输入" syso alt + / "会自动补全成System.out.println();

  2. 移动端touch事件影响click事件以及在touchmove添加preventDefault导致页面无法滚动的解决方法

    这两天自己在写一个手机网页,用到了触屏滑动的特效,就是往右滑动的时候左侧隐藏的菜单从左边划出来. 做完之后在手机原生浏览器中运行正常,但在QQ和微信中打开,发现touchmove只会触发一次,而且to ...

  3. STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  4. 使用CSS完美实现垂直居中的方法

    使用XHTML+CSS来实现元素的垂直居中一直是前端开发中的一个比较复杂且棘手的问题,作为网页设计师或前端开发工程师,这个垂直居中问题也是必须掌握的技巧之一,一些互联网公司面试题中也会出现这类题目.今 ...

  5. Redis从基础命令到实战之字符串类型

    字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串和和二进制数据.本文以代码形式列举常用的操作命令,并在实践部分演示一个简单的商品管理功能,实现了通常使用关系型数据库开发的增改查功能,注 ...

  6. WinForm程序中的类TextBox的自定义控件, 添加失去焦点的功能

    原理: 一.在控件的后台代码中, 添加布尔类型的属性CanFocus 二.在控件的构造函数中, 注册Enter事件的处理方法. 并在处理方法中,根据CanFocus属性的值来决定是否可以丢失焦点, 如 ...

  7. libcurl教程

    名称 libcurl 的编程教程 目标 本文档介绍使用libcurl编程的一般原则和一些基本方法.本文主要是介绍 c 语言的调用接口,同时也可能很好的适用于其他类 c 语言的接口. 跨平台的可移植代码 ...

  8. Android菜鸟成长记8 -- 布局实践(微信界面的编写)

    前面我们简单的介绍了一下android的五大布局,那么现在我们来实践一下,写一个简单的微信界面 首先,我们新建一个weixin.xml的linnerlayout布局 我们日常使用的微信,从简单的方面来 ...

  9. CSS考试题目

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. SecureCRT和SecureFx设置中文乱码

    SecureCRT和SecureFx设置中文乱码 SecureCRT和SecureFx连接服务器时中文显示乱码,找了好多资料好久都没整出来,后来整出来了,因此把个人的解决办法提供出来,已变帮助更多的人 ...