zoukankan      html  css  js  c++  java
  • 查看LINUX进程内存占用情况

    ps -aux命令详解

     

    https://blog.csdn.net/x_i_y_u_e/article/details/48463623

    Linux ps aux指令詳解
     
    linux上进程有5种状态:
    1. 运行(正在运行或在运行队列中等待)
    2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
    3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
    4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
    5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
     
    1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    2)ps -A 显示所有程序。
    3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    4)ps -e 此参数的效果和指定"A"参数相同。
    5)ps e 列出程序时,显示每个程序所使用的环境变量。
    6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
    7)ps -H 显示树状结构,表示程序间的相互关系。
    8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    9)ps s 采用程序信号的格式显示程序状况。
    10)ps S 列出程序时,包括已中断的子程序资料。
    11)ps -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
    12)ps u   以用户为主的格式来显示程序状况。
    13)ps x   显示所有程序,不以终端机来区分。
    14)ps -l 較長,較詳細的顯示該PID的信息
     
    # ps -lA |more
    F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
    4 S 0 1 0 0 76 0 - 1193 109952 ? 00:00:03 init
    1 S 0 2 1 0 -40 - - 0 migrat ? 00:00:03 migration/0
    1 S 0 3 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0
    1 S 0 4 1 0 -40 - - 0 migrat ? 00:00:02 migration/1
    1 S 0 5 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/1
    1 S 0 6 1 0 -40 - - 0 migrat ? 00:00:02 migration/2
    1 S 0 7 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/2
     
    相關信息的意義:
    F 進程的標誌(flag),4表示用戶為超級用戶
    S 進程的狀態(stat),各STAT的意義見下文
    PID 進程的ID
    C CPU使用資源的百分比
    PRI priority(優先級)的縮寫,
    NI Nice值,
    ADDR 核心功能,指出該進程在內存的那一部分,如果是運行的進程,一般都是“-”
    SZ 用掉的內存的大小
    WCHAN 當前進程是否正在運行,若為“-”表示正在運行
    TTY 登陸者的終端位置
    TIME 用掉的CPU的時間
    CMD 所執行的指令
     
    # ps aux |more
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 4772 564 ? S Sep22 0:03 init [3]
    root 2 0.0 0.0 0 0 ? S Sep22 0:03 [migration/0]
    root 3 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/0]
    root 4 0.0 0.0 0 0 ? S Sep22 0:02 [migration/1]
    root 5 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/1]
    root 6 0.0 0.0 0 0 ? Ss+ Sep22 0:02 [migration/2]
    root 7 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/2]
    root 8 0.0 0.0 0 0 ? S Sep22 0:00 [migration/3]
    root 9 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/3]
    root 10 0.0 0.0 0 0 ? S< Sep22 0:00 [migration/4]
    上述各位解释:
    USER 进程的属主;
    PID 进程的ID;
    PPID 父进程;
    %CPU 进程占用的CPU百分比;
    %MEM 占用内存的百分比;
    NI 进程的NICE值,数值大,表示较少占用CPU时间;
    VSZ 进程使用的虚拟內存量(KB);
    RSS 该进程占用的固定內存量(KB)(驻留中页的数量);
    TTY 该进程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。
    若为pts/0等,则表示由网络连接主机进程
    WCHAN 当前进程是否正在進行,若为-表示正在進行;
    START 該進程被觸發启动时间;
    TIME 該进程實際使用CPU運行的时间;
    COMMAND 命令的名称和参数;
    STAT狀態位常見的狀態字符
    D 无法中断的休眠状态(通常 IO 的进程);
    R 正在运行可中在队列中可过行的;
    S 处于休眠状态;
    T 停止或被追踪;
    W 进入内存交换 (从内核2.6开始无效);
    X 死掉的进程 (基本很少見);
    Z 僵尸进程;
    < 优先级高的进程
    N 优先级较低的进程
    L 有些页被锁进内存;
    s 进程的领导者(在它之下有子进程);
    l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
    + 位于后台的进程组;
     
    ———————————————————————————————————————————————————————————————————————————————————————————— 

    https://www.cnblogs.com/zxc2man/p/7458467.html

     

    可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:

     (1)top

      top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

      可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:   $ top -u oracle

    内容解释:

    PID:进程的ID   

    USER:进程所有者   

    PR:进程的优先级别,越小越优先被执行   

    NInice:值   

    VIRT:进程占用的虚拟内存   

    RES:进程占用的物理内存   

    SHR:进程使用的共享内存   

    S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数   

    %CPU:进程占用CPU的使用率   

    %MEM:进程使用的物理内存和总内存的百分比   

    TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。   

    COMMAND:进程启动命令名称

      常用的命令:

      P:按%CPU使用率排行   T:按MITE+排行   M:按%MEM排行

    (2)pmap

      可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:   $ pmap -d 14596

     (3)ps

      如下例所示:   $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  其中rsz是是实际内存   $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle |  sort -nrk5   其中rsz为实际内存,上例实现按内存排序,由大到小

     

      Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如 ps -ef | grep kafka 可以看到kafka这个程序的进程id

      

      可以看到是2913,现在可以使用如下命令查看内存:

    top -p 2913

      

      这样可以动态实时的看到CPU和内存的占用率,然后按q键回到命令行

      也可直接使用ps命令查看: ps -aux | grep kafka 

      

      第一个标注的地方是CPU和内存占用率,后面的943100是物理内存使用量,单位是k,此时kafka大约占用943M内存

      还可以查看进程的status文件: cat /proc/2913/status 

      

      VmRSS对应的值就是物理内存占用,大约为943M和刚才一致

      另外还可以通过 top 命令动态查看内存占用

      通过: ps aux | sort -k4,4nr | head -n 10 查看内存占用前10名的程序 

     
    ———————————————————————————————————————————————————————————————————————————————————————————
     

    Linux下使用sort进行排序

    https://blog.csdn.net/wade3015/article/details/92573738


    sort:可以实现依据不同的数据类型进行排序,其语法及常用参数格式如下:

    sort [-bcfMnrtk][源文件][-o 输出文件]
    补充说明:sort可针对文本文件的内容,以行为单位来排序。
    参  数:
    -b 忽略每行前面开始出的空格字符。
    -c 检查文件是否已经按照顺序排序。
    -f 排序时,忽略大小写字母。
    -M 将前面3个字母依照月份的缩写进行排序。
    -n 依照数值的大小排序。
    -o<输出文件> 将排序后的结果存入指定的文件。
    -r 以相反的顺序来排序。
    -t<分隔字符> 指定排序时所用的栏位分隔字符。
    -k 选择以哪个区间进行排序。
    1 sort的工作原理

    sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

    [root@gitlab ~]$ cat seq.txt
    banana
    apple
    pear
    orange
    pear
    [root@gitlab ~]$ sort seq.txt
    apple
    banana
    orange
    pear
    pear
    2 sort的-u选项

    它的作用很简单,就是在输出行中去除重复行。

    [root@gitlab ~]$ sort -u seq.txt
    apple
    banana
    orange
    pear
    pear由于重复被-u选项无情的删除了。

    3 sort的-r选项

    [root@gitlab ~]$ cat number.txt
    1
    3
    5
    7
    11
    2
    4
    6
    10
    8
    9
    [root@gitlab ~]$ sort number.txt  --sort默认的排序方式是升序
    1
    10
    11
    2
    3
    4
    5
    6
    7
    8
    9
    [root@gitlab ~]$ sort -n number.txt      --排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@gitlab ~]$ sort -n -r number.txt     --r表示降序,n表示按数字进行排序
    11
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    4 sort的-o选项

    由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。

    但是,如果你想把排序结果输出到原文件中,用重定向就需要使用追加的方式。

    [root@gitlab ~]$ sort -n -r number.txt > number.txt
    [root@gitlab ~]$ cat number.txt
    [root@gitlab ~]$
    number清空了。所以我们需要使用-o选项,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。

    [root@gitlab ~]$ sort -n -r number.txt -o number.txt
    [root@gitlab ~]$ cat number.txt
    11
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    5 sort的-t选项和-k选项

    [root@gitlab ~]$ cat facebook.txt
    banana:30:5.5
    apple:10:2.5
    pear:90:2.3
    orange:20:3.4
    [root@gitlab ~]$ sort -n -k 2 -t : facebook.txt
    apple:10:2.5
    orange:20:3.4
    banana:30:5.5
    pear:90:2.3
    这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)

    指定了间隔符之后,就可以用-k来指定列数了。我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。

    6 其他的sort常用选项

    -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

    -c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

    -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

    -M会以月份来排序,比如JAN小于FEB等等

    -b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。
    ________________________________________________________________________________________________________________________

    linux sort命令用法

     

    sort命令:用于将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。

    命令格式:

    sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

    常见参数:

    • -b 忽略每行前面开始出的空格字符。
    • -c 检查文件是否已经按照顺序排序。
    • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。只考虑空格、字母和数字
    • -f 排序时,将小写字母视为大写字母。
    • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。只考虑可打印字符。
    • -m 将几个排序好的文件进行合并。
    • -M 将前面3个字母依照月份的缩写进行排序。
    • -n 依照数值的大小排序;对指定的列进行排序,+0表示第一列,以空格或制表符作为列的间隔符。
    • -o<输出文件> 将排序后的结果存入指定的文件。
    • -u 去重,配合-c,严格校验排序;不配合-c,则只输出一次排序结果,一般用uniq代替。
    • -r 倒序(降序)以相反的顺序来排序。
    • -t<分隔字符> 指定排序时所用的栏位分隔字符。例如:-t. 表示按点号分隔域,类似于awk -F或cut -d
    • -k指定第几列或第几列的第几个字符。与-t配合使用
    • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
    • --help 显示帮助。
    • --version 显示版本信息。

    测试:

    去重:

    复制代码
    [root@bqh-118 ~]# cat qc.log 
    192.168.43.117
    192.168.43.119
    192.168.43.118
    192.168.43.118
    192.168.43.117
    192.168.43.117
    192.168.43.119
    192.168.43.110
    [root@bqh-118 ~]# sort -u qc.log 
    192.168.43.110
    192.168.43.117
    192.168.43.118
    192.168.43.119
    复制代码

    注:-u,一般用uniq代替。

    去重+降序(倒序)排序:

    [root@bqh-118 ~]# sort -ur qc.log 
    192.168.43.119
    192.168.43.118
    192.168.43.117
    192.168.43.110

    按数字排序:

    复制代码
    [root@bqh-118 ~]# sort -n qc.log 
    192.168.43.110
    192.168.43.117
    192.168.43.117
    192.168.43.117
    192.168.43.118
    192.168.43.118
    192.168.43.119
    192.168.43.119
    复制代码

    注:默认为升序。

    按数字倒序排序

    复制代码
    [root@bqh-118 ~]# sort -r qc.log 
    192.168.43.119
    192.168.43.119
    192.168.43.118
    192.168.43.118
    192.168.43.117
    192.168.43.117
    192.168.43.117
    192.168.43.110
    复制代码

    指定分隔符排序:按对应的列排序

    -k, --key=pos1[pos2]

      start a key at pos1 (orign 1), end it at pos2 (default end of line)

    1. 默认按整行排序。

    2. -t指定分隔符,-k1,分隔符之后的第一列排序

    3. -k 1,1  用逗号来分隔字段,表示第一个字段开始排序到第一个字段结束

    4. -k 1.1,3.3  用点分隔字符。表示第一个字段的第一个字符开始排序到第三个字段的第三个字符结束。

    复制代码
    [root@bqh-118 ~]# cat  qc3.log 
    192.168.43.117 a
    192.168.43.119 d
    192.168.43.118 z
    192.168.43.118 n
    192.168.43.117 o
    192.168.43.117 m
    192.168.43.119 k
    192.168.43.110 l
    [root@bqh-118 ~]# sort -t" " -k2 qc3.log 
    192.168.43.117 a
    192.168.43.119 d
    192.168.43.119 k
    192.168.43.110 l
    192.168.43.117 m
    192.168.43.118 n
    192.168.43.117 o
    192.168.43.118 z

    [root@bqh-118 ~]# sort -k2 qc3.log 
      192.168.43.117 a
      192.168.43.119 d
      192.168.43.119 k
      192.168.43.110 l
      192.168.43.117 m
      192.168.43.118 n
      192.168.43.117 o
      192.168.43.118 z

    复制代码

    注:分隔符默认为空格,-t可省略,所有上边命令可以sort  -k2 qc3.log

    复制代码
    [root@bqh-118 ~]# cat qc4.log
    192.168.0.1 00:OF:AF:45:4C:78
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.19 00:OF:76:29:30:DF
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.155 00:OY:TF:4Q:46:8M
    [root@bqh-118 ~]# sort -t. -k4,4nr qc4.log   #从第4个字段开始排序,到第4个字段结束排序,按数字降序
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.155 00:OY:TF:4Q:46:8M
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.19 00:OF:76:29:30:DF
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.1 00:OF:AF:45:4C:78
    [root@bqh-118 ~]# sort -t. -k3.1,4.1nr qc4.log  #从第三个字段第一个字符排序,到第四个字段第一个字符结束,按数字降序
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.1 00:OF:AF:45:4C:78
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.155 00:OY:TF:4Q:46:8M
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.19 00:OF:76:29:30:DF
    复制代码


     

     
     
     
     
     
     
     
查看全文
  • 相关阅读:
    Mysql-窗口函数
    aplly-lambda-map用法
    python-pymysql 操作数据库-创建-写入-多线程写入-读取-清空表
    graphviz安装
    sklearn-决策树
    pandas-烹饪指南
    Tomcat配置https
    azkaban 编译部署
    sqoop部署及使用
    spark面试题-1
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/14739103.html
  • Copyright © 2011-2022 走看看