马哥教育第十二天、进程管理、top、dstat、htop、case

  1. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

    cpu环0只运行内核,环3运行用户进程,当用户进程需要运行特权指令时(和硬件交互等)会发起软中断由用户模式转为内核模式,由内核代为执行相关操作。

    进程被内核调度分为不同进程状态:

    运行态(running):正在运行过程中的进程,

    睡眠态(sleeping):等待调度到cpu上运行之前的状态,分为可中断睡眠(interruptable):随时可以被唤醒,等待下一次被调度到cpu运行之前。不可中断睡眠(uninterruptable):等待外部满足之前无法继续运行状态。

    停止态(stopped):不会被内核调度并运行,只占用内存不占用cpu资源。

    僵死态(zombie):进程创建机制:每一个进程都是由其父进程fork()自身而来,创建一个与之相同的子进程,子进程被销毁后由父进程进行资源回收,当父进程被销毁于子进程前该子进程就称为僵尸进程。

    进程间通信:IPC (InterProcess Communication)

    同一主机通信:signal、shm共享内存、semerphor旗语

    不同主机通信:远程过程调用rpc: Remote Procedure Calling、socket

    CPU虚拟化:内核把cpu分为时间片(timeslice),进程没有运行结束但分配使用cpu时间结束,需要保存现场,等待内核下次调度该进程继续在上次结束位置运行称为恢复现场。

    线程:比进程更小可单独被调用执行的单位。在linux中被称为lwp轻量级进程

    进程分类:批处理进程,主要工作于后台对cpu占用率比较高、交互式进程对I/O设备占用率比较多、实时进程此类进程优先级最高必须优先处理。

    内存分页,每4k被内核分为一个页框(存储单位),内核负责从线性地址的页面数据映射到物理地址的页框中,内核借助于cpu硬件芯片mmu: 内存管理单元(memory management unit)存储线性地址和物理地址之间映射关系

    物理地址空间、线性地址空间是由内核虚拟给进程的,每个进程都认为自己可以使用全部内存,进程调度优先级140个(0-139)

    实时优先级:1-99数字越高优先级越高。

    静态优先级:100-139数字越小优先级越高,静态优先级用户可以根据nice值调整从-20--19对应100-139,进程启动nice默认为0,优先调度级高的进程,但是内核会根据进程被cpu使用频率自动提高或降低进程优先级,

    动态优先级:由内核管理维护,动态调整

  2. Linux进程管理工具:ps, pstree, pidof, top, htop, pmap, vmstat, dstat, kill, job, glance

    pstree:查看进程树。

    ps:显示进程状态的命令,常用选项a、x。a显示与终端相关的进程,x显示与终端无关的进程。支持两种风格:SysV, BSD在选项上无需加-例如:ps a 。相关字段解释:PID:进程号、TTY:终端信息、 STAT:进程状态、TIME:运行时长、COMMAND:那个程序启动的该进程

    常用组合ps aux或-ef或-eFH:-e显示所有进程,-f显示完整格式列表信息,-F:显示额外信息,-H:显示进程的层次结构

    ps aux字段解释:USER:用户、 PID:进程号、%CPU:cpu占用百分比、%MEM内存占用百分比、VSZ(Virtual memory SiZe):虚拟内存集,占用线性地址空间大小、RSS:常驻内存集(不能被内存页转移到swap空间的)、TTY:和终端相关、STAT:进程状态、START:进程启动时间、TIME:运行累计时长、COMMAND:表示那个程序启动的该进程,包含在[]的进程表示为内核线程

    ps -ef字段解释:UID:用户ID、PID:进程号、PPID:父进程号、C:cpu累计运行时长、STIME、TTY、TIME、CMD

    ps -eFH字段解释:UID、PID、PPID、C、SZ、RSS、PSR:显示进程运行在那颗cpu上、STIME、TTY、TIME、CMD

    ps -o自定义显示字段,常用组合ps axo例如:ps axo pid,command,psr,pri,ni,pri:进程优先级,ni:进程nice值

    STAT状态说明:

    R::运行态running

    S::可中断睡眠

    D:不可中断睡眠

    T:停止态stopped

    Z:僵死态zombie

    s::多个进程的领导者session leader

    +:前台进程

    l: 多线程进程

    N:低优先级进程

    <::高优先级进程

    pgrep:是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行

    -U UID:仅显示由指定用户启动的进程,例如:pgrep -U apache

    -G GID:仅显示与指定组相关的进程,例如:pgrep -U postgres

    -t term...: 仅显示与指定终端相关的进程,例如:pgrep -t tty1

    -l 同时显示进程号和程序名,例如:pgrep -lt tty1

    pidof:显示指定程序所启动的进程的ID,例如:pidof postgre

    top:显示linux任务,可以指定排序机制,M:内存百分比排序、P:CPU百分比排序、T:累积占用的CPU时间排序

    l:是否显示负载信息,显示格式如下:

    显示当前时间、系统运行时间、登录系统有多少用户、过去1,5,15分钟的平均负载指等待运行的进程队列的长度

    t:是否显示进程和cpu相关信息,进程显示格式如下:

    当前系统的进程总数、多少进程处于运行态、进程处于睡眠态、处于停止态、处于僵死态

    显示cpu信息格式如下: Cpu(s)表示为多核cpu,默认显示平均值,按1分别显示多核cpu详细信息

    us: 用户空间运行进程占用cpu百分比、sy:用于运行内核占用cpu百分比、ni:调整nice值占用cpu百分比、id:空闲cpu百分比、wa:等待I/O设备完成占用cpu百分比、hi:处理硬中断占用cpu百分比、si:处理软中断占用cpu百分比、st:被虚拟机占用的cpu百分比

    m:显示内核和交换内存相关信息,

    Mem:内存大小、used:已使用大小、free:未使用大小、buffers:缓冲大小、cached:缓存大小、swap:交换内存大小

    q:退出top、k终止某个进程、s修改top刷新频率,默认为3秒

    top字段说明:PID、USER、PR:RT表示实时优先级、NI:nice值、VIRT:虚拟内存集、RES:常驻内存集、SHR共享内存大小、S:进程状态、%CPU、%MEM、TIME+:累计占用cpu时间、COMMAND:启动此进程的命令

    htop:是一个 Linux 下的交互式的进程浏览器,可以用来替换Linux下的top命令

    u:交互式选择显示用户相关进程。

    l:光标选中进程,l显示该进程文件列表,esc退出。

    s:光标选中进程 ,s显示进程执行的系统调用,esc退出。

    a:指定进程调度在那个cpu上

    F1:获取帮助

    vmstat:命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息例如:vmstat 2 3 ,每2秒更新一次只显示3次

    procs:字段说明:

    r:运行队列的长度、如果该队列过长说明cpu运行太慢。

    p:被阻塞(等待IO完成,如:不可中断睡眠)队列的长度,如果该队列太长说明I/O设备读写速度太慢

    memory:内存字段说明:

    swpd:从物理内存交换至swap中的数据量

    free:空闲物理内存大小

    buff:缓冲、为了提高加速写操作

    cache:缓存、为了提高加速读操作

    swap:交换分区字段说明:

    si(swap in):数据进入swap中的数据速率,kb/s

    so(swap out):数据离开swap中的数据速率,如果频繁的读写交换分区说明内存太小,需要添加

    io:

    bi(block in): 从块设备读入的数据速率,kb/s

    bo(block out):保存至块设备的数据速率

    system:

    in(interrupt): 中断速率

    cs(context switch):进程切换速率

    cpu:us:、sy:、id:、wa:、st:

    常用选项:-s:显示内存统计数据

  3. 进程启动时调整nice值例如:nice -n 5 top

    调整已运行进程的nice值,例如:renice -n -5 pid

    进程间通信,信号:signal,借助于kill命令基于kill命令向其它的进程发信号,显示常用信号:kill -l或man 7 nignal,每个信号都可以使用三种方式之一在Kill进行调用:

    数字代称:1, 2, 9, 15

    信号完整名称:SIGHUP, SIGINT, SIGKILL, SIGTERM

    信号简称:HUP, INT, KILL, TERM

    1) SIGHUP:让程序重读配置文件需无须重新启动;

    2) SIGINT:interrupt,打断正在运行中的程序;

    9) SIGKILL:直接结束进程

    15) SIGTERM:允许该进程完成任务后结束,默认发该信号例如:kill PID

    killall:结束某一类所有进程例如:killall -9 httpd

    Linux作业控制:

    前台作业:通过终端启动,并在终止之前一直占据着终端

    后台作业:作业启动之后即运行于后台,释放前台

    交互式模式:手动启动的非守护进程类的程序,一般都运行于前台;

    如何将作业运行于后台:

    1、运行中的作业:Ctrl+z,送往后台后,作业处于STOPPED状态

    2、尚未启动作业:COMMAND &,此类操作终端关闭该进程也终止,nohup COMMAND &终端关闭进程也正常允许

    查看Ctrl+z送往后台的作业:jobs,

    作业控制命令:fg #:将后台作业调回前台,bg #:让后台作业继续在后台运行

    dstat:进程查看

    -c: 显示CPU统计数据

    -d: 显示disk统计数据

    -D DISK: 只显示指定disk的统计数据

    -g: 显示page的统计数据

    -i: 显示中断的统计数据

    -m: 显示内存的统计数据

    -l: 显示系统负载的统计数据

    -n: 显示网络接口相关

    -N INTERFACE: 仅显示指定的网络接口的数据

    -s: 显示交换内存

    -p: 进程队列

    --ipc: 显示ipc消息队列、信号量和共享内存的使用状况

    -y: 系统状态数据

    -f:以完整格式显示所有信息

    -v":显示结果类似于vmstat命令

    默认相当于使用“dstat -cdngy”,也相当于“dstat -a”

    网络连接状态统计:--tcp、--udp、--raw、--unix

    pmap命令:显示指定进程的物理内存空间映射表。例如:pmap PID

    glances类似于htop,但是可以查看远程主机信息:由epel源所提供

    课外作业:nmap, netcat, tcpdump, nethogs, iftop

  4. case有多个测试条件时,case语句会使得语法结构更清晰,支持文件名通配机制,还支持 | ,语法格式如下

    case 变量引用 in

    PATTERN1)

    分支1

    ;;

    PATTERN2)

    分支2

    ;;

    *

    分支n

    ;;

    esac

    练习:写一个脚本,对/etc/目录及内部的所有文件打包压缩

    显示一个菜单,让用选择使用的压缩工具:xz) xz compress tool、gz) gzip compress tool、bz2) bzip2 compress tool

    根据用户选择的工具,对/etc执行相应的操作并保存至/backups目录,文件形如/backups/etc-日期时间.tar.压缩后缀

  5. #!/bin/bash
    #
    read -p "Please select the compression method(xz | gz | bz2):" Compression
    etc="etc-`date +%Y-%m-%d-%H-%M-%S`"
    case $Compression in
    xz)
       tar Jcf "$etc.tar.xz" /etc/*
           if [ ! -d /backups ];then
                mkdir -p /backups
           fi
    
                mv "$etc.tar.xz" /backups/
           ;;
    gz)
       tar zcf "$etc.tar.gz" /etc/*
           if [ ! -d /backups ];then
                mkdir -p /backups
           fi
                mv "$etc.tar.gz" /backups/
           ;;
    bz2)
       tar jcf "$etc.tar.bz2" /etc/*
           if [ ! -d /backups ];then
                mkdir -p /backups
           fi
                mv "$etc.tar.bz2" /backups/
           ;;
    *)
       echo "you inpot error:"
    exit 5
    ;;
    esac

    练习:写一个脚本,使用形式如下所示showifinfo.sh [-i INTERFACE|-a] [-v]

    1、-i或-a不可同时使用,-i用于指定特定网卡接口,-a用于指定所有接口;显示接口的ip地址

    2、使用-v,则表示显示详细信息显示接口的ip地址、子网掩码、广播地址;

    3、默认表示仅使用-a选项;

  6. if [ $# -lt 1 ];then
            che=a
    else
            che=$1
    fi
    #read -p "please inpot i or a or v:" che
    count=`ifconfig | grep "eth[0-9]" | wc -l`
    if [  $che == "ia" -o $che == "ai" ]; then
        echo "Options a and i Cannot be used together "
        exit 6
    else
            case $che in
            i)
              read -p "please inpot need display network equipment this machine $count network:" str
               if [ $str -le $count &> /dev/null -a $str -gt 0 ];then
                   let str=$str-1
                  ipadd=$(ifconfig eth"$str" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>")
                  echo "eth$str addr:$ipadd "
               else
                   echo "you inpot error"
                   exit 2
               fi
            ;;
            a)
              for((i=0;$i < $count;i++));do
                ipadd=$(ifconfig eth"$i" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>")
                  echo "eth$i addr:$ipadd " 
              done
            ;;
            v)
              for((i=0;$i < $count;i++));do
                ipadd=$(ifconfig eth"$i" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>")
                  echo "eth$i addr:$ipadd "
                ipadd=$(ifconfig eth"$i" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}(255)\>")
                  echo "eth$i Bcast:$ipadd "  
                ipadd=$(ifconfig eth"$i" |grep -Eo "\<(255\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\>")
                  echo "eth$i Mask:$ipadd "
              done
            ;;
            *)
            echo "error"
            exit 5
            ;;
            esac
    fi
时间: 2024-08-06 22:24:28

马哥教育第十二天、进程管理、top、dstat、htop、case的相关文章

马哥教育第二十二天IO模型理论、数据库基础理论、LAMP平台理论基础及mysql部署

1.IO模型理论基础详解:                 http或https都是基于tcp协议完成通讯.在tcp中使用socket通讯模型,在domain中界定socket是如何定义.                           domain有三种工作类型:                                        unix domain:每个socket地址是个文件路径                                        ipv4 do

【挨踢人物传】马永亮:感悟学习三境界 引领马哥教育的崛起(第19期)

[编者有话]        本期的嘉宾马永亮,一次误以为是"擅长"的选择,开始结缘计算机,然而当真正接触后才发现犹如"井底之蛙",此前的擅长根本不值一提,从天堂到地狱的落差,没有挫败他的信心和追求,反而激起了他更加强烈的求知欲望,在IT的道路上不断的成长感悟-- [本期人物档案] 个人信息: 51CTO账号:马哥教育 姓名:马永亮 性别:男 所在地:河南郑州 教育信息:研究生 关键词:马哥教育创办人 Linux系统运维专家 51CTO专家博主 51CTO学院签约讲师

马哥教育M28-第5-7天的学习总结

马哥M28-第五天. linux安全的上下文: 进程的发起者       命令       对象 root           ping        127.0.0.1 root           touch       testfile1 primary group :主要组.私有组 supplementary  group : 辅助组.附加组.公有组 /etc/passwd:(里面记录的用户的密码映射到了/etc/shadow) pwconv :将passwd当中的密码映射到了/etc/

马哥教育第20天至23天学习总结

马哥M28_20天<font size=4>1.ping -s 60000 目标主机ip地址 -f :指定发包大小60000ping2.IP :由前网络号部分和后主机号部分组成:网络号位数必须是连续性的二进制111111,不能是非连续性的:网络ID由IP二进制与子网掩码二进制组合求解得到正确的网络号计算网络数:2^可变的网络ID计算网络的主机最大数量:2^主机ID位-2 0.0.0.0表示所有地址 cidr书写方式:1.1.1.0/24 24表示网络号位数 A类地址: 前8位网络ID,后24位

Python培训时长多久可以学会?马哥教育9年经验之谈

在Python成为一门炙手可热的语言之后,很多人也开始准备向这个行业发展.技术入行也就是培训和自学两条路,各有优劣,不过培训因为学习比较系统比较快也受到不少人欢迎. 今天我就来给大家分享一下Python培训里的一些东西,让大家在选择的时候多掌握点情报. 选择一家好的教育培训机构的确可以达到事半功倍的效果.不仅能大大缩短学员自行摸索和自我积累的时间,而且能帮助学员在更高的起点上超越,从而在"前人"的肩膀上未雨绸缪,少走弯路. 总体来说,正规的IT培训机构通常具有从业经验丰富.阅历深厚的职

使用kubeadm快速部署Kubernetes(v1.12.1)集群---来源:马哥教育马哥原创

使用kubeadm快速部署Kubernetes(v1.12.1)集群------来源:马哥教育马哥原创 Kubernetes技术已经成为了原生云技术的事实标准,它是目前基础软件领域最为热门的分布式调度和管理平台.于是,Kubernetes也几乎成了时下开发工程师和运维工程师必备的技能之一. 一.主机环境预设 1.测试环境说明 测试使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware.virtualbo

《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》

GIAC.GOPS大会完美落幕 除了你.我.他,还有马哥教育陪你走过 马哥教育协办过多次全球大会,此次GIAC.GOPS全球互联网大会完美落幕,作为协办方我们也是很荣幸!马哥教育的创始人马哥带着马帮学员,让他们有更多的机会与大咖们交流分享,建立更广的人脉圈子. 本次大会可谓是大咖云集的一场盛会!各种技术总监.CTO. 通过本次大会就可以感受到马哥教育的教学精神.马哥教育不仅可以让你学到专业的技能,还有更多的机会与大咖们分享交流.我们不仅要学的好,丰富的人脉资源是我们职场上必要部分!相信在参加本次

马哥教育面授班-标准I/O和管道-课后小作业-2016年7月28

马哥教育面授班-7月28号作业 1 .将/etc/issue 文件中的内容转换为大写后保存至/tmp/issue.out 文件中 [[email protected] ~]# tr 'a-z' 'A-Z' </etc/issue | >> /tmp/issue.out [[email protected] ~]# cat /tmp/issue.out  CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \T \N \D \S MAGE EDUCATIO

马哥Linux培训马哥教育到底怎么样?马哥教育好不好?我来讲讲我的曲折经历!

2016年是我很迷茫的一年,不知道该学什么,不知道该去哪里,当时也有去培训的打算,也不确定培训什么,php?前端?or运维,同学有做PHP的,也有Java的也有前端的,也有做运维的,他们的建议我也听了不少,但是自己还是犹豫不决,怕花了钱到时找不到工作,后来感觉运维相对开发要容易一些,听同学说PHP今年也降温不少,学的人太多,没前两年好找了,当然,学得特好再另说.后来就去马哥考察了,当时去的时候是早上8点左右,看到有马哥的学员在校门口买早餐,包子,茶叶蛋什么的,我也没听课进去看看教室和学员聊了几句