nproc是什么意思_top/htop内容的含义

uptime

uptime命令显示了load avg,它其实是读取的/proc/uptime文件:

/proc/uptime 文件

cat /proc/uptime

9592411.58 9566042.33

第一个是系统启动了多久(单位s),第二个意思是系统启动以来,cpu idle花费的时间(单位s)。多核机器上,第二个可能大于第一个,因为他是每个核心idle的总和。

怎么才能知道uptime 真的是读取这个文件呢?想办法查看一下,这里可以用strace :

[root@localhost ~]# strace uptime 2>&1 | grep open

open("/proc/uptime", O_RDONLY) = 3

open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4

open("/proc/loadavg", O_RDONLY) = 4

strace 命令在stderr上打印了uptime的系统调用情况,在stdout上打印命令的原始输出。strace -e open uptime 可以起到和grep open相同的作用。uptime只是格式化输出了/proc的内容。如果是脚本里想要uptime值,自己读取/proc/uptime或许更方便一些。

Load average

[root@localhost ~]# cat /proc/loadavg

0.00 0.01 0.05 2/374 40656

前三列没什么好说的,第四列是当前有多少个进程,和多少个进程处于running或者runable,最后一列是最新的被分配的pid。running的意思是,当前进程正在物理cpu上运行;runable的意思是,它在等系统给他分配cpu时间片。

[root@localhost ~]# sleep 10 &

[1] 40674

[root@localhost ~]# sleep 10 &

[2] 40675

[root@localhost ~]# sleep 10 &

[3] 40676

[root@localhost ~]# cat /proc/loadavg

0.00 0.01 0.05 2/375 40677

可以看到,每运行一次,pid就+1,cat /proc/loadavg最后一列值可以证明。

证明第四列是当前正在运行的进程数:

[root@localhost ~]# cat /proc/loadavg

0.05 0.04 0.05 2/374 40717

当前有两个进程在运行(其中一个是当前的cat,另一个是vmware的vm-tool进程)

[root@localhost ~]# cat /dev/urandom > /dev/null &

[1] 40718

[root@localhost ~]# cat /proc/loadavg

0.09 0.04 0.05 3/375 40719

创建一个无意义,但不断运行的进程(随机生产些数据,然后写入/dev/null),第四列 正在运行的进程数+1(另外两个运行中的进程和上面同理)。

load数量指进程状态处在 :正在运行、等待运行、和不可中断(后面对这个状态做解释)的进程数。load avg就是过去1min,5min,15min load数量的平均数,但这个解析是简化版本,其实并不太对。直接引用维基百科上的解释:

Mathematically speaking, all three values always average all the system load since the system started up. They all decay exponentially, but they decay at different speed. Hence, the 1-minute load average will add up 63% of the load from last minute, plus 37% of the load since start up excluding the last minute. Therefore, it's not technically accurate that the 1-minute load average only includes the last 60 seconds activity (since it still includes 37% activity from the past), but that includes mostly the last minute.

关于不可中断状态:

进程 struct task_struct

的 state 字段为TASK_UNINTERRUPTIBLE,进程陷入了不能被中断的阻塞操作,无视信号。 What is an uninterruptable process?

http://stackoverflow.com/questions/223644/what-is-an-uninterruptable-process

内核的某些处理流程是不能被打断的。如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程(这个插入的流程可能只存在于内核态,也可能延伸到用户态),于是原有的流程就被中断了

如果是单核cpu的话,loadavg是1(同一时间运行一个进程),就说明cpu利用率是100%。如果是双核cpu,loadavg为2(同一时间运行两个进程)说明cpu利用率是100%。htop左上角和nproc命令可以看系是几核cpu。

load数量包括了不可中断的进程数,但是处于这个状态的进程并不怎么影响cpu运行(可以认为不使用cpu时间)。所以从loadavg推断cpu使用率不太准,这也能解释一些为什么load很高,但是实际cpu使用率不高。

mpstat可以查看瞬时cpu使用情况,要安装sysstat(这是个牛逼的工具)。

[root@localhost ~]# yum install sysstat -y

[root@localhost ~]# mpstat 1

Linux 3.10.0-327.el7.x86_64 (localhost.virthost) 02/26/17 _x86_64_ (1 CPU)

17:38:41 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

17:38:42 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

17:38:43 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

^C

Average: all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

进程

htop默认显示用户进程和用户线程。

shift+H打开关闭用户线程

shift+K打开关闭内核线程

F5显示进程继承关系(类似ps -f)

/proc//{pwd,exe,cmdline} 里包含了进程当前工作目录的链接,可执行程序的链接和命令行。可以通过读取procfs里的内容,从内核获取信息。

/proc//status 包含当前进程的许多信息(内存分配情况,父进程id等),uid指明了当前进程所属用户:

[root@localhost htop]# cat /proc/47937/status | grep Uid

Uid: 0 0 0 0

id 命令可以找到这个用户的相关信息。其实id也是读取/etc/passwd和/etc/group文件获取用户信息:

[root@localhost]# strace -e open id 0

...

open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3

open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3

open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3

open("/etc/group", O_RDONLY|O_CLOEXEC) = 3

uid=0(root) gid=0(root) groups=0(root)

+++ exited with 0 +++

为什么会去找/etc/passwd 呢?这个是读取了/etc/nsswitch.conf 配置。

[root@localhost htop]# cat /etc/nsswitch.conf

...

passwd: files sss

shadow: files sss

group: files sss

...

关于这个配置文件,可以参考这里:,总之就是/lib64/libnss_files.so 加载了这个文件,其他的一系列的name service和这个文件有关(比如dns),还可以配置成从ldap中获取用户名密码。

unix用户的密码保存在/etc/shadow:

[root@localhost]# cat /etc/shadow

root:$6$eS1H0Kk/$MPOOjZyuhc14tzBl.2O2VoLoXxkirzIdKKw41tP/cEjfEPe58VcQB3LLlGoJzuHRrE.WIjii9nalKWl/GJMoR/:17153:0:99999:7:::

第二列开头的$6$表示加密算法是sha512,后面紧接着是盐和盐+密码的hash。

用户运行可执行文件时,进程所属用户一般是当前用户自己,而不是可执行文件本身的属主(这点应该很好理解)。

使用sudo -u 运行程序可以切换进程属主。sudo权限在 /etc/sudoers配置,最好使用visudo编辑配置文件,它会对文件格式做验证。

/etc/passwd是非常敏感的文件,passwd在普通用户权限下运行,也能更改密码,说明passwd肯定是以root身份运行的,否则它没发修改passwd文件。当二进制程序有x权限后,可以设置setuid权限:

sudo chmod u+s /usr/bin/passwd

[root@localhost]# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

这样,二进制文件运行时,进程属主就是二进制文件的属主。

其他的特殊权限还有sticky bit和setgid。下面的命令可以找到权限类似passwd这样的命令:

[root@localhost]# find /usr/bin -user root -perm -u+s

/usr/bin/chage

/usr/bin/gpasswd

/usr/bin/newgrp

/usr/bin/chfn

/usr/bin/chsh

/usr/bin/su

/usr/bin/sudo

/usr/bin/mount

/usr/bin/umount

/usr/bin/staprun

/usr/bin/crontab

/usr/bin/pkexec

/usr/bin/passwd

进程状态

R 在运行队列里

S 可中断的休眠(等待事件发生)

D 不可中断的休眠,发生页面错误时,发生的IO不可以被中断,进程此时不能处理信号,处理信号可能会造成另外一个页面错误。如果有太多进程处于这个状态,意味着有可能大量进程发生页面错误,也许应该看下swap。

Z 僵尸状态,子进程退出后,相关的资源已经释放,父进程应该在收到SIGCHL信号后D收尸,不应该把子进程随便乱扔。

T 被任务控制信号停止,ctrl+z终止后台进程可以看到这种状态。

t 被debugger停止(调试),gdb -p attach的进程,可以看到这个状态。

X 应该永远看不见

F9 htop 发送信号快捷键

可以制造一个处于uninterruptible状态的进程。使用NFS挂在远程目录的时候,如果远程目录不存在,进程就会被挂起。我们使用google的DNS 8.8.8.8 试试,因为它没有打开NFS:

[root@localhost ~]# mount 8.8.8.8:/tmp /tmp &

[1] 48642

[root@localhost ~]# ps aux | grep mount

root 48642 0.0 0.0 125628 924 pts/1 S 22:03 0:00 mount 8.8.8.8:/tmp /tmp

root 48643 0.0 0.1 42468 1608 pts/1 D 22:03 0:00 /sbin/mount.nfs 8.8.8.8:/tmp /tmp -o rw

root 48645 0.0 0.0 112616 700 pts/1 R+ 22:03 0:00 grep --color=auto mount

使用strace看看它到底在哪个调用上挂起了:

[root@localhost ~]# sudo strace /sbin/mount.nfs 8.8.8.8:/tmp /tmp -o rw

...

mount("8.8.8.8:/tmp", "/tmp", "nfs", 0, "vers=4,addr=8.8.8.8,clientaddr=1"...

进程运行的时间

linux的时间片大约在几毫秒(搞清楚linux上时间片到底多长也挺有意思的)。loadavg在单核机器上小于1,意味这cpu在过去一段时间什么事情都没做。

进程优先级

NI 用户空间优先级,最低-20到最高19。经验是升一级优先级通常可以获得10%的更多cpu时间。

PRI 内核空间优先级,0-139。0-99是实时优先级,100-139才是给用户进程用的,这映射到用户优先级的-20到19。

内存

编写用户空间的程序员或者程序,会感觉自己的程序拥有全部内存,这是幻觉。

用户态程序不会直接访问物理内存,只能访问虚拟内存空间,内核会把虚拟地址映射到物理内存或者磁盘上。

htop/top内存的含义:

VIRT/VSZ 虚拟内存,包括二进制的代码,数据,共享库,换出的页,映射了但是还没使用的页。

RES/RSS 进程实际在物理内存中的空间,不包括换出的内存,但是包括和其他进程共享的。

SHR 共享的内存

htop/top内存使用率是指RES/RSS内存占总物理内存的百分比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程间通信(IPC)+进程加锁解锁

【0】README 0.1) source code and text description are from orange’s implemention of a os;0.2) for complete code , please visit https://github.com/pacosonTang/Orange-s-OS/tree/master/ipc_8 【1】看看,我们的进程代…

QA与测试到底有什么区别?

文章目录引言QA与测试的区别?QA、QC、QM的关系与区别?QA工作内容与职责引言 近期微信公众号后台有同学留言问: QA与测试的区别? QA、QC、QM的区别?以及QA的工作内容与职责。 针对这些问题我查阅了一些资料然后结合自…

java 进程运行时间_将Java类作为子进程运行

java 进程运行时间我本周需要将Java类(而不是jar)作为子进程运行。 更确切地说,我想从测试内部产生一个新进程,而不是直接在测试内部(进程内)运行它。 我不认为这是幻想或复杂的事情。 但是,这不…

划分vlan实验心得体会_思科:相同vlan,不同交换机之间的通信

实验拓扑如下:VPC 26 IP 23.1.1.3 24 VLAN20VPC 25 IP 12.1.1.2 24 VLAN10VPC1 IP 12.1.1.1 24 VLAN10VPC2 IP 23.1.1.2 24 VLAN20IOL交换机命名为SW1 先配置SW1的vlan10 和20检查SW1的vlan信息配置SW1的vlan10 和20检查SW2的vlan信息下一步将SW1和SW2连接的接口改为…

如何通过W3school学习JS/如何使用W3school的JS参考手册

文章目录学习JS对象DOM 对象HTML 对象JS 的常规类型教程学习 jQuery学习平台: W3school类似的学习平台: 菜鸟教程学习JS对象 DOM 对象 HTML 对象 JS 的常规类型 教程 学习 jQuery

快速选择

【0】README 0.1)设有一组N 个数而要确定其中第k 个最小(大)者,我们称之为选择问题; 选择问题的解法?” 解法即为 快速选择算法; 0.2) 快速选择是对 快速排序 改造而来&#xff0…

java模板方法模式_Java中的模板方法模式

java模板方法模式模板方法模式是一种行为模式,建议在超类中更一般地定义算法。 该算法是在称为模板方法的方法中定义的。 子类仅定义更具体的算法步骤的实现。 使用这种设计模式的好处是,算法后面的任何更改只会影响超类中的代码。 此外,它还…

hive 索爱_达内大数据云计算

第一阶段(Java基础)Java语言的高级特性静态导入、自动封箱拆箱、可变参数、增强for、枚举、类加载器、反射、内省、泛型、注解、动态代理回掌握Java语言的高级特性Java多线程多线程加强、线程池、Thread Local掌握Java线程池技术,掌握线程的Join、notify、notifyAll…

建立文件系统

【0】README 0.1) source code and text description are from orange’s implemention of a os and for complete code, please visit https://github.com/pacosonTang/Orange-s-OS/blob/master/orange_s_fs.tar; 0.2) 此文件系统涉及到的…

判断字符串是否为空

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>检查指定的值是不是空字符串</title><script>function test_1() {// var name document.getElementById("name").value;// ale…

java策略设计模式_Java中的策略设计模式

java策略设计模式策略设计模式是一种行为模式&#xff0c;其中我们有多种算法/策略来完成一项任务&#xff0c;所使用的算法/策略留给客户选择。 各种算法选项封装在单独的类中。 在本教程中&#xff0c;我们将学习在Java中实现策略设计模式。 UML表示形式&#xff1a; 首先&…

随机森林算法 python_Python实现的随机森林算法与简单总结

本文实例讲述了Python实现的随机森林算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;随机森林是数据挖掘中非常常用的分类预测算法&#xff0c;以分类或回归的决策树为基分类器。算法的一些基本要点&#xff1a;*对大小为m的数据集进行样本量同样为m的有放回抽样&…

Hibernate的学习笔记

文章目录简介配置文件hibernate.cfg.xml映射配置文件主键生成方式主键生成方式的配置identitysequencenativeincrementassigned映射类型使用 Hibernate 实现 CRUD简介 Hibernate是对象关系映射&#xff08;ORM&#xff0c;Object RelationShip Mapping&#xff09;框架&#x…

在diy的文件系统上创建文件的流程

【0】README 0.1&#xff09; source code are from orange’s implemention of a os , and for complete code , please visit https://github.com/pacosonTang/Orange-s-OS/tree/master/fs_create_file_p366 &#xff1b; 0.2&#xff09;本文总结的内容是干货&#xff0c;…

java设计模式 订阅模式_Java中的外观设计模式

java设计模式 订阅模式立面是指建筑物的外观。 当穿过街道时&#xff0c;我们所看到的只是建筑物的外观。 该工作面抽象了建筑物的所有复杂实现细节。 同样&#xff0c; 外观设计模式旨在为子系统中的一组接口提供统一的接口。 这个统一的接口对客户端隐藏了子系统的复杂性。 …

dnn模型 list index out of range_基于svm的财务预警模型

前言本文将我国A股上市公司作为研究对象&#xff0c;选取了A股 2015-2019 年度被 ST 或被 *ST上市公司&#xff0c;剔除了部分非财务原因导致ST或*ST的上市公司。财务指标选择了T-3期的资产负债率、流动比率、应收账款周转率等10个财务指标。数据收集及预处理导入所需要库 im…

汇编操作显存

【0】README 0.1&#xff09;本文转自&#xff1a; http://www.cnblogs.com/youxin/archive/2012/05/21/2512329.html for relative source code , please visit https://github.com/pacosonTang/Orange-s-OS/blob/master/lib.inc 【1】关于 80*25彩色字符模式显示缓冲区&…

Hibernate中的实体对象的三种状态

对于 Hibernate 而言&#xff0c;实体对象的状态分为三种&#xff1a; 1.暂时态 当对象刚创建&#xff0c;和 Session 没有发生任何关系时&#xff0c;当程序运行完就立刻消失&#xff0c;被称为暂时态。 2.持久态 持久态的对象和 Session 发生了关系&#xff0c;如执行了 ses…

java设计模式之状态模式_Java中的状态设计模式

java设计模式之状态模式在本教程中&#xff0c;我们将探讨另一种流行的行为设计模式-状态设计模式。 当我们使用可以存在于多个状态的对象时&#xff0c;状态设计模式的知识变得非常有用。 当对象的行为取决于其当前状态时&#xff0c;我们应该主要使用它。 这种模式有助于我们…

php概率计算_PHP指定概率算法

PHP指定概率算法&#xff0c;可用于刮刮卡&#xff0c;大转盘等抽奖算法。假设&#xff1a;有一个二维数组&#xff0c;记录了所有本次抽奖的奖项信息&#xff1a;$test_arr array(a>20,b>30,c>50);a奖概率20%&#xff0c;b奖概率30%&#xff0c;c奖概率50%模拟函数执…