zoukankan      html  css  js  c++  java
  • 系统监控

    1. 系统见识和进程控制工具

    1.1 top 命令

    top 命令时 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 win 中的任务管理器,默认 5 s 刷新一次结果。

    代码被 cpu 调用运行的过程 —— 进程

    杀死进程:释放 cpu、内存的过程

    僵尸进程:即父进程被杀死,子进程没有被杀死,没有占用 CPU,但占用内存

    父进程可以生成一堆子进程,杀死父进程,子进程会被回收

    (父进程)bash - (子进程)bash

    00. 第一行为任务队列信息

    12:38:33 当前时间
    up 50days 系统运行时间,格式为 时:分
    1 user 当前登录用户数
    load average:0.06,0.60,0.48 系统负载,三个数值分别为 1 分钟,5分钟,15分钟前到现在的平均值

    01. 第二、三行为进程和 CPU 的信息

    Tasks:29 total 进程总数
    1 running 正在运行的进程数
    28 sleeping 睡眠的进程数,不占 cpu
    0 stopped 停止的进程数
    0 zombie 僵尸进程数
    cpu(s):0.3% us 用户空间占用 cpu 百分比
    1.0% sy 内核空间占用 cpu 百分比
    0.0% ni 用户进程空间内改变过优先级的进程占用 cpu 百分比
    98.7% id 空闲 cpu 百分比
    0.0% wa(wait) 等待输入输出的 cpu 时间百分比
    0.0% hi 硬件中断占用 cpu 时间的百分比
    0.0% si 软件中断占用 cpu 时间的百分比
    0.0% st 被偷走的 cpu 占用百分比(如虚拟机使用物理机的内存,大于 0 表示运行虚拟机)

    02. 第四、五行为内存信息:

    Mem:   2050284k total,   552424k used,  1497860k free,    25576k buffers(缓冲区)	# 内存
    Swap:  4095996k total,        0k used,  4095996k free,   186724k cached	(缓存)	# 交换分区
    

    内存中有一块单独的空间 buffer,叫缓冲区,从硬盘中加载到内存,先加载到 buffer

    cache 是高速缓存区,为了解决 cpu 与内存的速度差,存在于内存中,将 cpu 经常要用访问的数据放在 cache中,避免了频繁加载同一类型数据。

    03. 进程信息:

    列名 含义 列名 含义
    PID 进程 id TIME 进程使用的 cpu 时间总计,单位秒
    PPID 父进程 id TIME+ 进程使用的 cpu 时间总计,单位 1/1000秒
    RUSER real user name %MEM 进程使用的物理内存百分比
    UID 进程所有者的用户 id VIRT 进程使用的虚拟内存总量,单位 kb,VIRT=SWAP+RES
    USER 进程所有者的用户名 SWAP 进程使用的虚拟内存中,被换出的大小,单位 kb
    GROUP 进程所有者的组名 RES 进程使用的、未被换出的物理内存大小,单位 kb, RES=CODE+DATA
    TTY 启动进程的终端名,不是从终端启动的进程为 ? CODE 可执行代码占用的物理内存大小,单位 kb
    PR 优先级 DATA 可执行代码一位的步伐(数据段+栈)占用的物理内存大小,单位 kb
    NI nice 值,负值表示高优先级,正直表示低优先级 SHR 共享内存大小,单位 kb
    P 最后使用的 cpu,仅在多 cpu 环境下有意义 nFLT 页面错误次数
    %CPU 上次更新到现在的 cpu 时间占用百分比 nDRT 最后一次写入到现在,被修改的页面数
    s 进程状态:D = 不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程 COMMAND 命令名/命令行
    WCHAN 若该进程睡眠,则显示睡眠中的系统函数名 Flags 任务表示,展开 sched.h

    1.2 free 命令

    查看内存的使用状态

    free
    echo 'scale=2;1906280/1024/1024' | bc -l	# 内存换算(scale=2 保留2位)
    free -m		# 以 M 为单位
    free -h		# 以 G 为单位
    
    [root@hj ~]# free
    				1			2		3			4			5			6
                 total       used       free     shared    buffers     cached
    1	Mem:       2050284     552720    1497564       3172      26712     186776
    2	-/+ buffers/cache:     339232    1711052
    3	Swap:      4095996          0    4095996
    
    
    • total:总计、used:使用、free:剩余、shared:共享
    • 内存使用的就是 buffer 和 cache
    • 其中 f(1)(1) = 2050284 kb ,为内存总大小,f(1)(1) + f(1)(2)
    • f(1)(2) = 552720 kb,为总共分配出去的 buffer 和 cache,f(1)(2) = f(1)(5) + f(1)(6) + f(2)(2) = 26712 + 186776 + 339232
    • f(1)(5)、f(1)(6) 26712 kb、 186776 kb,为还没有用的 buffer 和cache
    • f(2)(2) = 339232 kb,为被使用的 buffer 和 cache,那么内存使用率 = f(2)(2) / f(1)(1) = 339232 / 2050284(echo 'scale=2;339232/2050284 | bc -l'
    • f(2)(3) = 1711052 kb,为内存的真实剩余量,f(2)(3) = f(1)(5) + f(1)(6) + f(1)(3) = 26712 + 186776 + 1497564

    2. 进程监控

    进程是程序的一次动态进行

    守护进程是在后台运行并提供系统服务的一些进程

    父进程、子进程:当一个进程创建另一个进程时,第 1 个进程被称为新进程的父进程,而新进程被称为子进程

    2.1 ps 命令

    ps(process search)命令用于查看当前进程的状态

    ps 
    ps aux		# 详细查看,all、user_id、x 在哪个终端
    ps aux | head -2	# 查看第一行,每行就是一个进程、TTY表示在哪个终端运行,?表示在后台不在任何终端
    

    一般显示出的进程很多,要想精确找到想要的进程,可以与 grep 命令搭配使用

    ps aux | grep 'init'	# 找到进程中包含 init 字符的进程
    ps aux | grep 'init' | grep -v 'grep'	# 过滤掉包含 grep 的行,grep -v 反向匹配
    
    ls /test | grep 'txt'		# 过滤包含 txt 的文件
    grep 'root' /etc/passwd		# 过滤,包含 root 的行
    

    2.2 pgrep 命令

    除了可以利用管道符搭配 grep 命令过滤查看进程的 PID 外,还可以使用 pgrep 命令,它可以用于查询正在运行的进程的 PID 信息等。

    语法:

    pgrep [选项] '进程名'
    

    选项:

    • -l:同时显示进程名和 PID
    • -o:当匹配多个进程时,显示进程号最小的那个
    • -n:当匹配多个进程时,显示进程号最大的那个

    查看终端、火狐浏览器的 PID:

    pgrep -l 'bash' 
    pgrep -l 'firefox'
    

    2.2 kill 命令

    杀死进程,要想杀死一个进程,需要先找到进程的 PID(精确),或进程名(不精确),kill 实际上是发信号,要 cpu 挂起进程。

    kill -9	PID	# 强制杀死
    

    杀死终端:

    ps asx | grep 'bash' | grep -v 'grep'	# 找到终端的 PID
    kill -9 PID		# 强制杀死终端	(精确)
    
    

    杀死 Firefox

    ps -asx | grep 'firefox' | grep -v 'grep'
    kill PID	# 杀死火狐
    firefox &   # 运行在后台
    jobs	# 查看后台运行的程序
    fg %1	# 将后台调到前台运行,其中 1 为 工作号
    bg %1	# 直接在后台运行
    pstree  # 进程树
    pkill -9 'bash'	# 按照进程名杀(全杀)
    
    
  • 相关阅读:
    Linux 下安装 numpy 和 scipy
    排序算法总结
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    Java读取Excel并解析文本(并格式化输出)
    快捷键记忆
    初级应该学习的
    深入理解加密、解密、数字签名和数字证书
    数据签名和验签
    POI结构与常用类
    exlipse继承反编译插件
  • 原文地址:https://www.cnblogs.com/midworld/p/11049508.html
Copyright © 2011-2022 走看看