您的位置:首页 > 运维架构 > Linux

linux上的常用的进程与内存优化命令

2016-02-22 11:03 369 查看

进程

  ps命令

    f 以树状结构显示

    u 显示详细信息

    a 显示所有进程

    -A 显示所有进程

    -u 用户名 是显示该用户下的进程

    -l 更多进程详细信息

    例子1. 以树状结构显示root用户下进程的详细信息

$ps fu -u root


    显示结果如下

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
         cpu占比
            内存占比
                 虚拟内存
                     驻留内存 
root      2615  0.0  0.0  28180   248 ?        S    09:07   0:00 /usr/sbin/dnsmasq --conf-file=/var/
root      2545  0.0  0.0  28180   244 ?        S    09:07   0:00 /usr/sbin/dnsmasq --conf-file=/var/
root      2484  0.0  0.0  28180   240 ?        S    09:07   0:00 /usr/sbin/dnsmasq --conf-file=/var/
root         2  0.0  0.0      0     0 ?        S    09:06   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   09:06   0:00  \_ [kworker/0:0H]
root         7  0.2  0.0      0     0 ?        S    09:06   0:13  \_ [rcu_sched]
root         8  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [rcu_bh]
root         9  0.3  0.0      0     0 ?        S    09:06   0:15  \_ [rcuos/0]
root        10  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [rcuob/0]
root        11  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [migration/0]
root        12  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [watchdog/0]
root        13  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [watchdog/1]
root        14  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [migration/1]
root        15  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [ksoftirqd/1]
root        17  0.0  0.0      0     0 ?        S<   09:06   0:00  \_ [kworker/1:0H]
root        18  0.0  0.0      0     0 ?        S    09:06   0:03  \_ [rcuos/1]
root        19  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [rcuob/1]
root        20  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [watchdog/2]
root        21  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [migration/2]
root        22  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [ksoftirqd/2]
root        24  0.0  0.0      0     0 ?        S<   09:06   0:00  \_ [kworker/2:0H]
root        25  0.0  0.0      0     0 ?        S    09:06   0:02  \_ [rcuos/2]
root        26  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [rcuob/2]
root        27  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [watchdog/3]
root        28  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [migration/3]
root        29  0.0  0.0      0     0 ?        S    09:06   0:00  \_ [ksoftirqd/3]


      例子2:显示所有用户的详细信息

$ps aux


      显示效果如下

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  34304  4772 ?        Ss   09:06   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    09:06   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    09:06   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   09:06   0:00 [kworker/0:0H]
root         7  0.2  0.0      0     0 ?        S    09:06   0:15 [rcu_sched]
root         8  0.0  0.0      0     0 ?        S    09:06   0:00 [rcu_bh]
root         9  0.3  0.0      0     0 ?        S    09:06   0:17 [rcuos/0]
root        10  0.0  0.0      0     0 ?        S    09:06   0:00 [rcuob/0]
root        11  0.0  0.0      0     0 ?        S    09:06   0:00 [migration/0]
root        12  0.0  0.0      0     0 ?        S    09:06   0:00 [watchdog/0]
root        13  0.0  0.0      0     0 ?        S    09:06   0:00 [watchdog/1]
root        14  0.0  0.0      0     0 ?        S    09:06   0:00 [migration/1]
root        15  0.0  0.0      0     0 ?        S    09:06   0:00 [ksoftirqd/1]
root        17  0.0  0.0      0     0 ?        S<   09:06   0:00 [kworker/1:0H]
root        18  0.0  0.0      0     0 ?        S    09:06   0:03 [rcuos/1]
root        19  0.0  0.0      0     0 ?        S    09:06   0:00 [rcuob/1]


      例子3:显示,更多详细信息 -l

$ps -l


      显示效果如下:f

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
标志   
状态(r运行,s睡眠,t终止,z僵尸) 
    用户 进程号 父进程
             cpu使用
                优先权
                   优先级修正
                    地址
                       使用内存
                         等待的进程资源
                             终端      运行时间 运行指令 

0 S  1000  6311  6303  0  80   0 -  7840 wait   pts/0    00:00:00 bash
0 R  1000  6720  6311  0  80   0 -  4537 -      pts/0    00:00:00 ps


      例子4:查找所需要的信息

$ps aux |grep httpd


      显示如下

$root     10161  0.0  0.0  19892  2356 pts/0    S+   15:40   0:00 grep --color=auto httpd


  top命令

top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下:

s – 改变画面更新频率

l – 关闭或开启第一部分第一行 top 信息的表示

t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示

m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示

N – 以 PID 的大小的顺序排列表示进程列表

P – 以 CPU 占用率大小的顺序排列进程列表

M – 以内存占用率大小的顺序排列进程列表

h – 显示帮助

n – 设置在进程列表所显示进程的数量

q – 退出 top

s – 改变画面更新周期

    例子1:显示所有进程状态

$top


    显示内容:

top - 13:33:35 up  4:26,  2 users,  load average: 0.55, 0.43, 0.48             ### 当前时间  ,已经运行时间 ,2个用户 ,负载:三个数字分别为1分钟,5分钟,15分钟采样。当其数值等于cpu个数则为满负载。
Tasks: 247 total,   2 running, 245 sleeping,   0 stopped,   0 zombie            ### 任务即进程总数247,2个正在运行,245个在沉睡,0个停止,0个僵尸
%Cpu(s):  3.6 us,  1.3 sy,  0.0 ni, 95.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st ### 在用户状态下占用cpu3.6% ,系统态下1.3%,改变了优先级的进程为0%,cpu空闲95.1%,wa等待输入输出为0%,
KiB Mem:  16428032 total, 13078560 used,  3349472 free,   332320 buffers     ### 物理内存为16G,13G已经使用,3g空闲,用作内核的缓存为3G
KiB Swap:  4190204 total,        0 used,  4190204 free. 10133084 cached Mem   ### 交换区为4G,使用量为0,4G空闲的交换区,缓冲的的交换区为10G

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND    ### 进程id,用户,优先级,优先级1,  虚拟空间,驻留内存(代码段,数据段),共享内存,状态,占用cpu,占用内存,运行时间,执行应用
4098 yamin     20   0 1769864 589156 108800 S   7.6  3.6  45:12.75 firefox
4322 yamin     20   0 2745780 138920  79836 S   3.7  0.8   7:57.22 QQ.exe
2808 root      20   0  410220 133188  52304 S   2.7  0.8  12:26.51 Xorg
6233 yamin     20   0  329200  45848   7160 S   2.7  0.3   5:27.95 python2.7
4325 yamin     20   0    9976   7628   1632 S   2.3  0.0   4:45.18 wineserver
3694 yamin     20   0 1633388 144360  89212 S   1.7  0.9   4:24.64 compiz
5706 yamin     20   0 3894544 559548  47376 S   1.3  3.4   4:22.52 java
6303 yamin     20   0  663356  36416  26860 S   1.0  0.2   0:16.91 gnome-terminal
9 root      20   0       0      0      0 S   0.7  0.0   0:55.38 rcuos/0
1777 root      20   0  259504  37460  10544 S   0.7  0.2   0:06.68 ceph-mon
5030 yamin     20   0 1022408 101820  41884 S   0.7  0.6   2:21.92 codeblocks
6247 yamin     20   0  402932  42768   4024 S   0.7  0.3   0:41.54 python2.7
7 root      20   0       0      0      0 R   0.3  0.0   0:47.00 rcu_sched
32 root      20   0       0      0      0 S   0.3  0.0   0:10.10 rcuos/3
1757 root      20   0    4372   1792   1620 S   0.3  0.0   0:18.23 acpid
2116 root      20   0  715652  60996  20256 S   0.3  0.4   0:20.67 ceph-osd
2274 root      20   0  746672  77188  21396 S   0.3  0.5   0:21.78 ceph-osd
2351 root      20   0  745576  78160  21040 S   0.3  0.5   0:21.59 ceph-osd
3622 yamin     20   0  500228  42176  23668 S   0.3  0.3   0:44.21 ibus-ui-gtk3


      例子2:top选择需要显示的

  在执行top命令,按f键可以进入列选择,以下是该命令可以显示的列信息。在该界面下按空格可以选中或者取消某一列。

* PID     = Process Id        SID     = Session Id        nsMNT   = MNT namespace I
* USER    = Effective User    nTH     = Number of Threa   nsNET   = NET namespace I
* PR      = Priority          P       = Last Used Cpu (   nsPID   = PID namespace I
* NI      = Nice Value        TIME    = CPU Time          nsUSER  = USER namespace
* VIRT    = Virtual Image (   SWAP    = Swapped Size (K   nsUTS   = UTS namespace I
* RES     = Resident Size ( * CODE    = Code Size (KiB)
* SHR     = Shared Memory (   RUSER   = Real User Name
* S       = Process Status    DATA    = Data+Stack (KiB
* %CPU    = CPU Usage         nMaj    = Major Page Faul
* %MEM    = Memory Usage (R   nMin    = Minor Page Faul
* TIME+   = CPU Time, hundr   nDRT    = Dirty Pages Cou
* COMMAND = Command Name/Li   WCHAN   = Sleeping in Fun
PPID    = Parent Process    Flags   = Task Flags <sch
UID     = Effective User    CGROUPS = Control Groups
RUID    = Real User Id      SUPGIDS = Supp Groups IDs
SUID    = Saved User Id     SUPGRPS = Supp Groups Nam
SUSER   = Saved User Name   TGID    = Thread Group Id
GID     = Group Id          ENVIRON = Environment var
GROUP   = Group Name        vMj     = Major Faults de
PGRP    = Process Group I   vMn     = Minor Faults de
TTY     = Controlling Tty   USED    = Res+Swap Size (
TPGID   = Tty Process Grp   nsIPC   = IPC namespace I


    进程列意义

列名

含义

PID

进程id

PPID

父进程id

RUSER

Real user name

UID

进程所有者的用户id

USER

进程所有者的用户名

GROUP

进程所有者的组名

TTY

启动进程的终端名。不是从终端启动的进程则显示为 ?

PR

优先级

NI

nice值。负值表示高优先级,正值表示低优先级

P

最后使用的CPU,仅在多CPU环境下有意义

%CPU

上次更新到现在的CPU时间占用百分比

TIME

进程使用的CPU时间总计,单位秒

TIME+

进程使用的CPU时间总计,单位1/100秒

%MEM

进程使用的物理内存百分比

VIRT

进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

SWAP

进程使用的虚拟内存中,被换出的大小,单位kb。

RES

进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

CODE

可执行代码占用的物理内存大小,单位kb

DATA

可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb

SHR

共享内存大小,单位kb

nFLT

页面错误次数

nDRT

最后一次写入到现在,被修改过的页面数。

S

进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程

COMMAND

命令名/命令行

WCHAN

若该进程在睡眠,则显示睡眠中的系统函数名

Flags

任务标志,参考 sched.h

      例子3:显示某个进程

$top -p 进程号


      例子4:显示某个进程里面的线程

$top -Hp N ### N为进程号


 vmstat:查看系统负载

$vmstat


  显示信息

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
运行           内核缓冲 页面缓冲 内存进入交换区
  等待资源                   交换区进内存 
     交换区                    块设备读 块设备写
         空闲                         每秒中断数 
                                       上下文切换次数/秒                               
                                        用户态运行时间比
                                          核心态运行时间比          
                                             cpu空闲比率
                                              cpu等待IO占比
                                                虚拟机时间占比                                        
0  0      0 3317212 339412 10137400    0    0   126    29  485  375  6  2 91  1  0


  iostat:查看IO负载

$iostat


   pstree:查看进程

$pstree -p N   ###N为进程号


  /proc目录下查询

Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是 动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在 /proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。

除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。

例子1:可以使用cat /proc/xxx,显示相应信息。

/proc/buddyinfo      ###每个内存区中的每个order有多少块可用,和内存碎片问题有关

/proc/cmdline        ###启动时传递给kernel的参数信息

/proc/cpuinfo        ###cpu的信息,physical为物理CPU,cpu cores为物理cpu中的核心,而processor为逻辑cpu,例如开了超线程,可能会出现4个核心,8个逻辑cpu;siblings>cpu cores 则开了超线程

/proc/crypto         ###内核使用的所有已安装的加密密码及细节

/proc/devices        ###已经加载的设备并分类

/proc/dma            ###已注册使用的ISA DMA频道列表

/proc/execdomains    ###Linux内核当前支持的execution domains

/proc/fb             ###帧缓冲设备列表,包括数量和控制它的驱动

/proc/filesystems    ###内核当前支持的文件系统类型

/proc/interrupts     ###x86架构中的每个IRQ中断数

/proc/iomem          ###每个物理设备当前在系统内存中的映射

/proc/ioports        ###一个设备的输入输出所使用的注册端口范围

/proc/kcore          ###代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb

/proc/kmsg           ###记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理

/proc/loadavg       ###根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
/proc/locks          ###内核锁住的文件列表

/proc/mdstat         ###多硬盘,RAID配置信息(md=multiple disks)

/proc/meminfo        ###RAM使用的相关信息

/proc/misc           ###其他的主要设备(设备号为10)上注册的驱动

/proc/modules        ###所有加载到内核的模块列表

/proc/mounts         ###系统中使用的所有挂载

/proc/mtrr           ###系统使用的Memory Type Range Registers (MTRRs)

/proc/partitions     ###分区中的块分配信息

/proc/pci            ###系统中的PCI设备列表

/proc/slabinfo       ###系统中所有活动的 slab 缓存信息

/proc/stat           ### 所有的CPU活动信息

/proc/sysrq-trigger  ###

/proc/uptime       ###系统已经运行了多久

/proc/swaps         ###交换空间的使用情况

/proc/version       ###Linux内核版本和gcc版本

/proc/bus            ###系统总线(Bus)信息,例如pci/usb等

/proc/driver        ###驱动信息

/proc/fs             ###文件系统信息

/proc/ide           ###ide设备信息

/proc/irq           ###中断请求设备信息

/proc/net           ###网卡设备信息

/proc/scsi           ###scsi设备信息

/proc/tty            ### tty设备信息

/proc/net/dev       ###显示网络适配器及统计信息

/proc/vmstat        ###虚拟内存统计信息

/proc/vmcore        ###内核panic时的内存映像

/proc/diskstats     ### 取得磁盘信息

/proc/schedstat     ### kernel调度器的统计信息

/proc/zoneinfo      ###显示内存空间的统计信息,对分析虚拟内存行为很有用


     例子2:显示某个进程相关的信息

/proc/N        ###pid为N的进程信息

/proc/N/cmdline   ###进程启动命令

/proc/N/cwd      ###链接到进程当前工作目录

/proc/N/environ   ###进程环境变量列表

/proc/N/exe      ###链接到进程的执行命令文件

/proc/N/fd      ###包含进程相关的所有的文件描述符

/proc/N/maps     ###与进程相关的内存映射信息

/proc/N/mem      ###指代进程持有的内存,不可读

/proc/N/root     ###链接到进程的根目录

/proc/N/stat     ###进程的状态

/proc/N/statm     ###进程使用的内存的状态

/proc/N/status    ###进程状态信息,比stat/statm更具可读性

/proc/self       ###链接到当前正在运行的进程


     例子3:显示整个系统内存映像

$cat /proc/iomem


    显示效果如下

00000000-00000fff : reserved
00001000-0009fbff : System RAM
0009fc00-0009ffff : RAM buffer
000a0000-000bffff : PCI Bus 0000:00
000c0000-000effff : PCI Bus 0000:00
000c0000-000ccfff : Video ROM
000cf000-000cffff : Adapter ROM
000f0000-000fffff : PCI Bus 0000:00
000f0000-000fffff : reserved
000f0000-000fffff : System ROM
00100000-dfdf9bff : System RAM
01000000-017bc95b : Kernel code
017bc95c-01d2593f : Kernel data
01e90000-01fd2fff : Kernel bss
dfdf9c00-dfe4bbff : ACPI Non-volatile Storage
dfe4bc00-dfe4dbff : ACPI Tables
dfe4dc00-f7ffffff : reserved
dff00000-f7ffffff : PCI Bus 0000:00
e0000000-efffffff : PCI Bus 0000:02
e0000000-efffffff : 0000:02:00.0
f0000000-f01fffff : PCI Bus 0000:04
f0200000-f03fffff : PCI Bus 0000:04
f3d00000-f3dfffff : PCI Bus 0000:05
f3de0000-f3deffff : 0000:05:00.0
f3de0000-f3deffff : tg3
f3df0000-f3dfffff : 0000:05:00.0
f3df0000-f3dfffff : tg3
f3e00000-f3efffff : PCI Bus 0000:01
f3f00000-f3ffffff : PCI Bus 0000:03
f4000000-f7efffff : PCI Bus 0000:02
f4000000-f5ffffff : 0000:02:00.0
f6000000-f6ffffff : 0000:02:00.0
f7e00000-f7e1ffff : 0000:02:00.0
f7ffa000-f7ffa3ff : 0000:00:1a.7
f7ffa000-f7ffa3ff : ehci_hcd
f7ffb000-f7ffb0ff : 0000:00:1f.3
f7ffc000-f7ffffff : 0000:00:1b.0
f7ffc000-f7ffffff : ICH HD audio
f8000000-fcffffff : reserved
f8000000-fbffffff : PCI MMCONFIG 0000 [bus 00-3f]
fe000000-fed003ff : reserved
fec00000-fec003ff : IOAPIC 0
fec80000-fec803ff : IOAPIC 1
fed00000-fed003ff : HPET 0
fed00000-fed003ff : PNP0103:00
fed20000-fed9ffff : PCI Bus 0000:00
fedab410-fedab414 : iTCO_wdt
fee00000-feefffff : reserved
fee00000-fee00fff : Local APIC
ff97c000-ff97ffff : PCI Bus 0000:00
ff980000-ff980fff : PCI Bus 0000:00
ff980000-ff9803ff : 0000:00:1d.7
ff980000-ff9803ff : ehci_hcd
ffb00000-ffffffff : reserved
100000000-41fffffff : System RAM


     例子4:显示进程的内存映像

$cat /proc/N/maps


    显示效果:一共分6列,

列1:address: 0085d000-00872000 虚拟内存区域的起始和终止地址文件所占的地址空间
列2:perms:rw-p 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
列3:offset: 00000000 虚拟内存区域在被映射文件中的偏移量
列4:dev: 03:08 文件的主设备号和次设备号
列5:inode: 设备的节点号,0表示没有节点与内存相对应
列6:name: /lib/ld-2.3.4.so 被映射文件的文件名

列1          列2  列3    列4  列5                    列6 
00400000-006bc000 r-xp 00000000 fc:01 2360287                            /usr/bin/python2.7
008bb000-008bc000 r--p 002bb000 fc:01 2360287                            /usr/bin/python2.7
008bc000-00931000 rw-p 002bc000 fc:01 2360287                            /usr/bin/python2.7
00931000-00943000 rw-p 00000000 00:00 0
01fa7000-02c15000 rw-p 00000000 00:00 0                                  [heap]
7f6ef306f000-7f6ef30af000 rw-p 00000000 00:00 0
7f6ef30ef000-7f6ef3df0000 rw-p 00000000 00:00 0
7f6ef3df0000-7f6ef3dfc000 r-xp 00000000 fc:01 2493117                    /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so
7f6ef3dfc000-7f6ef3ffb000 ---p 0000c000 fc:01 2493117                    /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so
7f6ef3ffb000-7f6ef3ffc000 r--p 0000b000 fc:01 2493117                    /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so
7f6ef3ffc000-7f6ef4000000 rw-p 0000c000 fc:01 2493117                    /usr/lib/python2.7/dist-packages/OpenSSL/SSL.so


内存:

$ps aux -p N


  常驻内存RSS,将所有的进程的RSS相加显然是大于物理内存的。这是因为进程使用到了动态链接库是共享的,因此这分空间被重复多次计算了。

  可以使用cat查看proc下面的详细内存信息

$cat /proc/N/smaps          ###最详细的内存信息

$cat /proc/N/maps

$cat /proc/N/statm


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: