zoukankan      html  css  js  c++  java
  • 进程相关命令

    进程相关命令
    top,ps,vmstat,ss
    # top
    top - 08:43:01 up 13 min, 5 users, load average: 0.01, 0.22, 0.24
    Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
    Cpu(s): 1.3%us, 0.3%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Mem: 674684k total, 510748k used, 163936k free, 32368k buffers
    Swap: 2047992k total, 0k used, 2047992k free, 204960k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    2785 root 20 0 193m 33m 8960 S 1.3 5.0 0:12.49 Xorg
    3286 root 20 0 295m 14m 9.8m S 1.0 2.1 0:03.54 gnome-terminal
    ---------------------------------------------------------------------------------------------------------
    说明:
    第一行:top - 08:43:01 up 13 min, 5 users, load average: 0.01, 0.22, 0.24
    当前系统时间 系统运行时间 当前登录的用户数 平均负载:1分钟、5分钟、15分钟
    第二行:Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
    总共有多少个进程 运行中的进程数 处于睡眠中的进程 stop状态的进程数 僵尸进程数
    第三行:
    Cpu(s): 1.3%us, 0.3%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    1.3%us:用户空间占用CPU的百分比1.3%
    0.3%sy:内核空间占用CPU的百分比0.3%
    0.0%ni:改变过优先级的进程占用CPU的百分比0.0%
    98.3%id:空闲CPU百分比98.3%
    0.0%wa:IO等待占用CPU的百分比0.0%
    0.0%hi:硬中断(Hardware IRQ)
    0.0%si:软中断(Software Interrupts)占用CPU的百分比 0.0%
    0.0%st:虚拟机占用百分比
    第七行以下:各进程(任务)的状态监控
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    PID:进程id
    USER:进程所有者
    PR:进程优先级
    NI:nice值。负值表示高优先级,正值表示低优先级
    VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR:共享内存大小,单位kb
    S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU:上次更新到现在的CPU时间占用百分比
    %MEM:进程使用的物理内存百分比
    TIME+:进程使用的CPU时间总计,单位1/100秒
    COMMAND:进程名称(命令名/命令行)
    -----------------------------------------
    在top视图界面:
    1> 在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况;
    2> 进入top时,各进程默认是按照CPU的占用量来排序的;
    3> b:打开/关闭加亮效果;
    x:打开/关闭排序列的加亮效果;
    shift + >”或”shift + <”可以向右或左改变排序列;
    f:top进入另一个视图,在这里可以编排基本视图中的显示字段;有”*”表示可显示,没有”*”表示不显示;若要显示,按对应的字母;
    4> M:根据驻留内存大小进行排序;
    P:根据CPU使用百分比大小进行排序;
    k:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号;
    r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值;
    s:改变两次刷新之间的延迟时间;
    t:切换显示进程和CPU状态信息;
    W:将当前设置写入~/.toprc文件中;
    -----------------------------------------
    top [options]
    -d:指定每两次屏幕信息刷新之间的时间间隔;
    -p:通过指定监控进程ID来仅仅监控某个进程的状态;
    -u:指定特定用户的进程;
    top -b -n 1 ----可看到所有的进程状态(-n 1:显示一次)
    #########################################################################
    # ps命令
    选项:
    a:显示现行终端机下的所有进程,包括其他用户的进程;
    u:显示进程拥有者、状态、资源占用等的详细信息(注意有“-”和无“-”的区别);
    x:显示没有控制终端的进程。通常与 a 这个参数一起使用,可列出较完整信息;
    -e:显示所有进程;
    -f:完整输出显示进程之间的父子关系;
    -l:较长、较详细的将该 PID 的的信息列出;
    -o:自定义显示的字段;
    注:ps -aux 不同于 ps aux
    -----------------------------------------
    # ps -ef
    UID PID PPID C STIME TTY TIME CMD
    root 1 0 0 08:29 ? 00:00:00 /sbin/init
    root 13 2 0 08:29 ? 00:00:00 [sync_supers]
    PPID:父进程PID
    --------------------------------------------------------------------------------------
    # ps -aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.1 19356 968 ? Ss 08:29 0:00 /sbin/init
    root 2 0.0 0.0 0 0 ? S 08:29 0:00 [kthreadd]
    说明:
    USER: 运行进程的用户
    PID: 进程ID
    %CPU: CPU占用率
    %MEM: 内存占用率
    VSZ: 占用虚拟内存
    RSS: 占用实际内存 驻留内存
    TTY: 进程运行的终端
    STAT: 进程状态 man ps (/STATE)
    R 运行
    S 可中断睡眠 Sleep
    D 不可中断睡眠
    T 停止的进程
    Z 僵尸进程
    X 死掉的进程
    Ss s进程的领导者,父进程
    S< <优先级较高的进程
    SN N优先级较低的进程
    R+ +表示是前台的进程组
    Sl 以线程的方式运行
    START: 进程的启动时间
    TIME: 进程占用CPU的总时间
    COMMAND: 进程文件,进程名
    ------------------------------------------------------
    查看当前系统进程的uid,pid,stat,pri, 以uid号排序:
    ps -eopid,stat,pri,uid --sort uid
    ps axo user,pid,rss,cmd | head ----自定义显示的字段:user,pid,rss,cmd
    pidof (httpd)进程名:查看指定进程(httpd)的PID
    通过cpu/mem的使用来过滤排序:
    ps aux --sort -%cpu | more ----more:分页显示,按cpu使用排序
    ps aux --sort -pcpu | more ----按cpu使用排序
    ps aux --sort -pmem | more ----按mem使用排序
    ps -aux | sort -k4nr | head -10
    root 1244 0.0 3.1 286056 15460 ? Ssl 20:17 0:02 /usr/bin/kube-proxy --logtostderr=true --v=0 --master=http://192.168.1.50:8080
    root 1233 0.0 2.5 553052 12564 ? Ssl 20:17 0:01 /usr/bin/python -Es /usr/sbin/tuned -l -P
    root 3715 0.0 2.5 457180 12192 ? Ss 20:46 0:00 /usr/sbin/httpd -DFOREGROUND
    root 4987 0.2 2.5 219116 12300 ? Ssl 21:46 0:00 /usr/bin/flanneld -etcd-endpoints=http://192.168.1.50:2379 -etcd-prefix=/atomic.io/network
    root 929 0.0 1.9 285296 9384 ? Ssl 20:16 0:00 /usr/sbin/rsyslogd -n
    root 1248 0.0 1.7 558076 8276 ? Ssl 20:17 0:00 /usr/sbin/libvirtd
    apache 4628 0.0 1.6 459264 7780 ? S 21:26 0:00 /usr/sbin/httpd -DFOREGROUND
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    sort -k4nr中(k代表从根据哪一个关键词排序,后面的数字4表示按照第四列排序;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。-k3表示按照cpu占用率排序。
    通过进程名和PID:
    ps -C java
    ---> PID TTY TIME CMD
    ps -f -C java
    ---> UID PID PPID C STIME TTY TIME CMD
    根据线程来过滤进程:想知道特定进程的线程:
    ps -L pid
    ps -p 3785 -L
    ps -eLf ---查看线程
    显示安全信息,如果想要查看现在有谁登入了你的服务器:
    ps -eo user,pid,args
    格式化输出某用户(真实的或有效的UID)创建的进程: 系统管理员想要查看由pag用户运行的进程和这个进程的其他相关信息时: ps -U root -u pag u    -U:参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或ID。真实用户即实际创建该进程的用户;    -u:参数用来筛选有效用户ID(EUID)    最后的u参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几   列组成。
    ps实时监控进程状态:与watch命令结合:
    watch -n 1 ‘ps -aux --sort -pmem’
    watch命令:
    watch [options] COMMAND
    -n:周期
    -d:高亮显示
    -t:关闭watch命令在顶部的时间间隔
    ---------------------------------
    pstree:查看进程树
    监控线程数:ps -ef | grep java | wc -l
    监控网络客户连接数:netstat -n | grep tcp | grep 侦听端口 | wc -l
    #########################################################################
    # vmstat
    vmstat 2 3
    每2s采集一次数据,共采集3次(单位为kb)
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 142044 79772 8560 42540 1 6 22 9 106 193 1 1 98 1 0
    说明:
    r:可运行队列。单核cpu,不应该超过3(经验得到的数据,只是表明大于这个值表明运行队列有点长)
    b:当前被阻塞的进程,一般这些进程都是在等待某些外部资源而被阻塞。>3需要注意,而且一直出现或者经常出现,就更值得注意
    swpd:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
    free:空闲的物理内存的大小
    buff:缓存
    cache:cache直接用来记忆打开的文件,给文件做缓冲,当程序使用内存时,buffer/cached会很快地被使用。)
    si:有多少数据从swap到物理内存;
    so:有多少数据从物理内存到swap;
    bi:有多少数据从块设备读取到内存中(读磁盘);
    bo:有多少数据从内存中写到块设备中(写磁盘);
    in:中断数。一般代表大量设备操作成功通知内核。
    cs:上下文切换。一般代表任务需要紧急被cpu处理。数字高,只能说明内核在充分发挥它的任务调度作用。不能简单通过该数字判断cpu就出现瓶颈。
    us:用户进程所占用的cpu时间的百分比
    sy:内核在进行任务调度所占用的cpu时间的百分比
    id:cpu空闲所占用的时间百分比.仅仅0不能简单判断cpu出现瓶颈,只能说它被充分被留用。
    wa:等待IO所消耗时间百分比
    st:被硬件虚拟化的虚拟机所消耗掉的时间百分比
    -----------------------------------------------------------------
    vmstst [选项] [参数]
    选项:
    -a:显示活动内页;
    -f:显示启动后创建的进程总数;
    -m:显示slab信息;
    -n:头信息仅显示一次;
    -s:以表格方式显示事件计数器和内存状态;
    -d:报告磁盘状态;
    -p:显示指定的硬盘分区状态;
    -S:指定输出信息的单位,如:M,K(默认为K/1024bytes);
    参数:
    时间间隔:状态信息刷新的时间间隔;
    次数:显示报告的次数;
    #################################################################################
    # mpstat
    可以查看多核心cpu中每个计算核心的统计数据;而vmstat只能查看系统整体cpu情况。
    # mpstat
    Linux 2.6.32-431.el6.x86_64 (vm4.cluster.com) 09/17/2017 _x86_64_ (1 CPU)
    04:06:12 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    04:06:12 PM all 0.71 0.00 0.69 0.68 0.00 0.08 0.00 0.00 97.84
    说明:
    %user:表示处理用户进程所使用CPU的百分比。用户进程是用于应用程序(如Oracle数据库)的非内核进程;            
    %nice:表示使用nice命令对进程进行降级时CPU的百分比;  
    %system:表示内核进程使用的CPU百分比;
    %iowait:表示等待进行I/O所使用的CPU时间百分比;
    %irq:表示用于处理系统中断的CPU百分比;
    %soft:表示用于软件中断的CPU百分比;
    %idle:显示CPU的空闲时间;
    %intr/s:显示每秒CPU接收的中断总数;
    计算公式:
    total_current=user+system+nice+idle+iowait+irq+softirq
    total_pre=pre_user+ pre_system+ pre_nice+pre_idle+ pre_iowait+ pre_irq+ pre_softirq
    user=user_cur – user_pre
    total=total_cur-total_pre
    ---------------------------------
    mpstat -P CPU 时间间隔 采集次数
    mpstat -P ALL 1 5 ----所有的cpu
    mpstat -P 0 1 5 ----第一颗cpu
    ##########################################################################
    # sar
    ##########################################################################
    # iostat
    iostat用于输出CPU和磁盘I/O相关的统计信息. 
    # iostat
    Linux 2.6.32-431.el6.x86_64 (vm4.cluster.com) 09/17/2017 _x86_64_ (4 CPU)
    avg-cpu: %user %nice %system %iowait %steal %idle
    0.59 0.00 0.67 0.89 0.00 97.84
    Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
    sda 1.94 57.33 22.14 1714948 662300
    scd0 0.00 0.09 0.00 2560 0
    说明:
    avg-cpu段:
    %user: 在用户级别运行所使用的CPU的百分比;
    %nice: nice操作所使用的CPU的百分比;
    %sys: 在系统级别(kernel)运行所使用CPU的百分比;
    %iowait: CPU等待硬件I/O时,所占用CPU百分比;
    %idle: CPU空闲时间的百分比;
    Device段:
    tps:每秒钟发送到的I/O请求数;
    Blk_read /s:每秒读取的block数;
    Blk_wrtn/s:每秒写入的block数;
    Blk_read:读入的block总数;
    Blk_wrtn:写入的block总数;
    ----------------------------------------------
    iostat命令的参数说明
    -c:仅显示 CPU 统计信息。与 -d 选项互斥。
    -d:仅显示磁盘统计信息。与 -c 选项互斥。
    -k:以 KB为单位显示每秒的磁盘请求数,默认单位块。
    -m:以MB为单位显示每秒的磁盘请求数。
    -N:显示磁盘阵列信息
    -n:显示网络文件系统NFS报告。此选项仅适用于Linux内核2.6.17以上版本。
    -p device | ALL
    与 -x 选项互斥,用于显示块设备及系统分区的统计信息,也可以在 -p 后指定一个设备名,如:
    # iostat -p hda
    或显示所有设备:
    # iostat -p ALL
    -t 在输出数据时,打印收集数据的时间。
    -V 打印版本号和帮助信息。
    -x 输出扩展信息。
    iostat 2 ----每两秒显示所有的分区IO状态
    # iostat /dev/sda* 2 ----每两秒显示所有分区的io状态
    # iostat -kx -d sda 2 3
    ----查看sda的IO状态报告,每两秒打印一次,总共三次 ; -k是表示把默认以每秒多少块显示成每次多少KB;-x打印了一些扩展选项
    说明:
    rrqm/s:每秒的读请求数
    wrqm/s:每秒的写请求数
    r/s:每秒完成多少个读IO
    w/s:每秒完成多少个写IO <-- IOPS=(r/s+w/s)
    rsec/s:每秒读取了多少扇区的数据。 一个扇区=512字节数据
    wsec/s:每秒写了多少扇区的数据。
    rkB/s:每秒读了多少kb数据
    wkB/s:每秒写了多少kb数据
    avgrq-sz:平均请求数据的大小
    avgqu-sz:是平均请求队列的长度。毫无疑问,队列长度越短越好。
    await:平均完成IO需要等待多少时间, 包含服务时间,还有在队列中等待的时间。
    svctm:服务时间,从IO请求产生到,完成IO的时间。从源代码里可以看出:
    (r/s+w/s)*(svctm/1000)=util。
    举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),
    假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,
    说明系统出了问题。
    不过前面已经说过在磁盘阵列等多盘系统中util可能出现偏大的情况,所以svctm相应的也可
    能偏大。
    %util:磁盘带宽使用百分比。如果一直都是100%,说明磁盘很忙。
    ################################################
    kill
    ps -ef|grep 进程 ---获取到pid
    kill -9 pid
    # kill -TERM PPID ---给父进程发送一个TERM信号,试图杀死它和它的子进程。
    # killall httpd ---命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。
    # kill -HUP PID ---该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。
    pkill命令:可以按照进程名杀死进程
    pkill(选项)(参数)
    -o:仅向找到的最小(起始)进程号发送信号; -n:仅向找到的最大(结束)进程号发送信号; -P:指定父进程号发送信号; -g:指定进程组; -t:指定开启进程的终端。
    僵尸进程:
    # ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
    -A 参数列出所有进程
    -o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数
    检查当前僵尸进程信息:
    # ps -ef|grep defunct
    杀掉僵尸进程的语句:
    # ps -ef|grep defunct |grep -v grep |awk '{print "kill -9" $2,$3}'
    再次杀掉其父进程:
    # ps -ef|grep defunct |grep -v grep |awk '{print "kill -18" $3}'
  • 相关阅读:
    深入学习SlidingMenu 2015-06-12 20:27 856人阅读 评论(0) 收藏
    Android 判断SD卡是否存在及容量查询
    第三方登录,授权,分享
    GLSurfaceView用法详解
    Java/android面试题
    SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
    填充数字以达到位数
    web api post
    .net测试方法效率获取系统当前时间
    vs2012更新问题
  • 原文地址:https://www.cnblogs.com/skyzy/p/9226831.html
Copyright © 2011-2022 走看看