pidof

   
大家驾驭各类小孩一出生就会一个全国绝无仅有的编号来对其展开标识,用于未来上学,办社保等,就是大家的身份证号。那么在Linux系统中,用来管理运作程序的标识叫做PID,就是我们熟习的历程ID。那么什么样来找到程序的PID了,那么就需求用到命令pidof,其效果主要用来查看运行程序的PID。

FUSER

fuser功能
fuser
可以来得出当下哪位程序在采取磁盘上的某部文件、挂载点、甚至互联网端口,并提交程序进度的详尽音信.

fuser显示接纳指定文件或者文件系统的经过ID.默许意况下种种文件名背后跟一个假名代表访问类型。

走访类型如下:
c 代表当前目录
e 将此文件作为程序的可实施对象使用

f 打开的文书。默许不显得。
F 打开的公文,用于写操作。默许不显得。

r 根目录。
m 映射文件或者共享库。

s
将此文件作为共享库(或其余可装载对象)使用
当指定的文件没有被访问,或者出现谬误的时候,fuser会再次回到非零。
为了查看使用tcp和udp套接字的历程,须要-n选项并点名名称空间。默许IpV4和IpV6都会显示。套接字可以是本地的要么是长距离的端口,和长距离的地点。所有的域是可选的,可是其眼前的’,’必须存在。如下:
[lcl_port][,[rmt_host][,[rmt_port]]]
对此ip地址和port,名称和数字代表都足以利用。
fuser只把PID输出到正式输出,其余的都输出到正式错误输出。
常用选项
-a 显示所有命令行中指定的文本,默许情形下被访问的公文才会被出示。
-c 和-m一样,用于POSIX兼容。
-k 杀掉访问文件的历程。借使没有点名-signal就会发送SIGKILL信号。
-i 杀掉进度以前询问用户,如果没有-k那一个选项会被忽视。
-l 列出所有已知的信号名称。
-m name
指定一个挂载文件系统上的文书或者被挂载的块设备(名称name)。那样有着访问这几个文件或者文件系统的进度都会被列出来。假使指定的是一个目录会自动转换成”name/”,并运用具有挂载在老大目录上边的文件系统。
-n space
指定一个不等的命名空间(space).那里帮忙不一致的空普通话件(文件名,此处默许)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口,
可以指定端口号或者名称,如果不会挑起歧义那么可以拔取简单表示的款型,例如:name/space
(即形如:80/tcp之类的表示)。
-s 静默形式,那时候-u,-v会被忽略。-a不可以和-s一起利用。
-signal
使用指定的信号,而不是用SIGKILL来杀掉进度。可以透过名称或者号码来代表信号(例如-HUP,-1),这一个选项要和-k一起利用,否则会被忽略。
-u 在每个PID后边添加进度拥有者的用户名称。
-v
详细情势。输出似ps命令的出口,包罗PID,USER,COMMAND等许多域,若是是根本访问的那么PID为kernel.
-V 输出版本号。
-4
使用IPV4套接字,无法和-6共同行使,只在-n的tcp和udp的命名存在时不被忽视。
-6
使用IPV6套接字,不可能和-4一头利用,只在-n的tcp和udp的命名存在时不被忽略。

  • 重置所有的选项,把信号设置为SIGKILL. 

利用示例

来得应用某个文件的进度音讯
$ fuser -um /dev/sda2
/dev/sda2: 6378c(quietheart) 6534c(quietheart) 6628(quietheart)
6653c(quietheart) 7429c(quietheart) 7549c(quietheart)
7608c(quietheart)
本条命令在umount的时候很有用,可以找到还有何用到那些设备了。

干掉打开readme文件的先后

$fuser
-m -k -i readme
此间,会在kill往日询问是不是确定。最好增进-v以便精通将要杀那一个进度。

查阅这么些程序行使tcp的80端口
$fuser -v -n tcp 80

$fuser
-v 80/tcp
fuser分歧信号的利用
用 -l参数可以列出fuser所知的信号
# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM
TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO
PWR SYS
UNUSED
fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL,例如:只是挂起经过,那么发送HUP信号就可以了
# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3347 f…. tail
# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
# fuser -v /root/install.log

一,为啥要动用fuser?
   先说
fuser的作用,
  
fuser能识别出正在对某个文件或端口访问的经过
  
咱们想转手,还有哪些命令具备那些效应?
  
没错,是lsof,
   我们前边讲过,
lsof能够找出正在对点名文件访问的历程,
  
那么它们两者之间有啥不一样?
  
fuser有一个专门的用法在于它可以三遍杀死那么些正在访问指定文件的长河
   

二,如何利用fuser?
 
  
1,怎样用fuser获得正在使用指定文件的长河?
     用法: fuser
文件
    
表明:它会把正在使用当前文件的历程id列出

     [root@localhost
lhd]# umount /
     umount: /:
device is busy.
           (In some
cases useful info about processes that use
            the
device is found by lsof(8) or fuser(1))
     [root@localhost
lhd]# fuser /
     
/:                       1rc     2rc     3rc     4rc     5rc     6rc    
7rc    80rc    82rc    84rc    85rc   153rc   157rc   158rc

                               160rc   165rc   168rc  203rc   204rc  
205rc   253rc   441rc   444rc   516rc   521rc   524rc   582rc  
583rc

                               584rc   633rc  1052rc  1392rc  1394rc 
1417rc  1597rc  1609rc  1617rc  1620rc  1683rc  1744rc  1783r 
1785rc

                               1788rc  1806r  1808r  1810rc  1811rc 
1812rc  1813rc  1814rc  1815rc  1848rc  1886rc  1899rc  1900rc 
2001rc

Linux系统寻常管理1,基础教程。                               ……太多不一一列出

      说明:
     
这几个进度号前边的rc是怎么意思?
     
      c
将此文件作为当前目录使用。
      e
将此文件作为程序的可举办对象使用。
      r
将此文件作为根目录使用。
      s
将此文件作为共享库(或其余可装载对象)使用

  
2,怎么着列出进度的详细音讯,而不光是经过id?
     用
-v参数即可
     表明: -v: 
含义是:verbose output,详细的输出消息
     例子:

     [root@dev ~]#
fuser /var/log
    
/var/log:             4196c
     [root@dev ~]#
fuser -v /var/log
     

                          USER        PID ACCESS COMMAND
    
/var/log:            root       4196 ..c.. bash

   
3,怎么着列出进度所属的用户?
     用
-u参数即可
     表达: -u:
含义:display user IDs,突显用户id
    
     例子:
     [root@dev ~]#
fuser -u /var/log
    
/var/log:             4196c(root)
     表达: -n:
含义:获得正在访问某一端口的进程号,然后可以用kill命令杀死。

     [root@dev ~]#
fuser -un tcp 25
     
25/tcp:             4196(root)
    
4,怎么样杀死所有正在访问指定文件的进度?
     用
-k参数即可
     说明: -k:含义:
kill processes accessing the named file

     例子:

     [root@localhost
lhd]# fuser -v /root/install.log

                          用户     进程号 权限   命令
    
/root/install.log:   root       3185 f…. tail
     [root@localhost
lhd]# fuser -k /root/install.log
    
/root/install.log:    3185
     [root@localhost
lhd]# fuser -v /root/install.log

     表明:
-k参数可以杀死所有的正在访问指定文件的进度,所以用来杀进度时那多少个便利
     表明之二:
fuser如何杀死的长河?
            
它发送的是其一信号:SIGKILL

三,多学一些知识

   
1,fuser可以列出它所知的信号:
     用
-l参数即可
    
     例子:
     [root@dev ~]#
fuser -l
     HUP INT QUIT ILL
TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
     STKFLT CHLD CONT
STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
     UNUSED

   
2,fuser可以发送它已知的信号给访问的指定文件进度而顶替-k参数默许发送的SIGKILL
     
例如:只是挂起进程,那么发送HUP信号就可以了
    
      例子:
     
[root@localhost lhd]# fuser -v /root/install.log

                           用户     进程号 权限   命令
     
/root/install.log:   root       3347 f…. tail
     
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
     
/root/install.log:    3347
     
[root@localhost lhd]# fuser -v /root/install.log

centos Linux系统经常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top
,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

一 、进度的定义和分类
1.进度的定义
Linux是一个多用户多职分的操作系统。多用户是指三个用户可以在同一时间使用同一个linux系统;多职责是指在Linux下可以同时履行多少个职务,更详实的说,linux接纳了分时管理的章程,所有的天职都放在一个系列中,操作系统根据每个职分的预先级为种种职分分合作适的年月片,每个时刻片很短,用户根本感觉不到是七个职责在运作,从而使所有的义务共同分享系统资源,由此linux可以在一个职务还未履行完时,暂时挂起此职责,又去执行另一个义务,过一段时间以后再回去处理这一个职务,直到那么些职责成功,才从义务队列中除去。那就是多任务的概念。
地点说的是单CPU多任务操作系统的景色,在那种环境下,纵然系统可以运作多个职分,可是在某一个时间点,CPU只好举办一个历程,而在多CPU多任务的操作系统下,由于有八个CPU,所以在某个时间点上,可以有多少个经过同时运行。
经过的的骨干概念是:在自我的虚拟地址空间运行的一个独立的顺序,从操作系统的角度来看,所有在系统上运行的东西,都足以称之为一个经过。
需求专注的是:程序和经过是有分其余,进度纵然层序明显发生,可是它并不是先后,程序是一个经过指令的会面,它可以启用一个或两个经过,同时,程序只占用磁盘空间,而不占用系统运行资源,而经过仅仅占用系统内存空间,是动态的、可变的,关闭进程,占用的内存资源随之释放。
例如,用户在linux上开辟一个文书、就会暴发一个打开文件的进程,关闭文件,进度也随机关闭。即使在系统上启动一个服务,例如启动tomcat服务,就会生出一个应和的java的历程。而假设开行apache服务,就会时有发生七个httpd进度。

骨干用法

pidof [选项] [程序名]

其常用选项参数如下所示:

选项 说明
-s 仅返回一个PID
-c 仅返回具有相同root目录的PID
-x 显示由脚本开启的进程
-o omitpid 忽略指定的PID
pidof命令的返回值通常只有两个:
- 0:pidof命令至少找到一个对应的PID
- 1:pidof没有找到任何匹配的PID

LSOF

lsof 拥有越多的职能
# lsof -i 看系统中有哪些开放的端口,哪些进程、用户在使用它们,比
netstat -lptu 的输出详细。

# lsof -i 4  查看IPv4类型的经过
COMMAND    PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4     2213 Debian-exim    4u  IPv4   4844       TCP *:smtp
(LISTEN)
dhclient3 2306        root    4u  IPv4   4555       UDP *:bootpc

# lsof -i 6  查看IPv6类型的长河
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2213 Debian-exim    3u  IPv6   4820       TCP *:smtp (LISTEN)

# lsof -i @192.168.1.2  查看与某个具体的IP相关联的进程
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
amule   3620 root   16u  IPv4  11925       TCP
192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule   3620 root   28u  IPv4  11952       TCP
192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140
(ESTABLISHED)

# lsof -p 5670 查看PID为5670的长河打开的文本。

 

2.历程的分类
依照进程的功能和运作的次序分类,进度可分割为两大类:
系统经过:可以执行内存资源分配和经过切换等管理工作;而且,该进度的运转不受用户的过问,即便是root用户也不可以干预系统经过的运作。
用户进度:通过实践用户程序、应用程序或基本之外的系统程序而发生的进度,此类进度可以在用户的决定下运作或关闭。
针对用户进度,又足以分为交互进度、批处理进度和医护进程三类。
交互进度:由一个shell终端启动的长河,在实施进程中,必要与用户举行交互操作,可以运作于前台,也可以运行在后台。
批处理进度:该进程是一个进度集合,负责按顺序启动别的的进度。
守护进度:守护过程是直接运转的一种进度,日常在linux系统启动时启动,在系统关闭时停下。它们独立于决定终端并且周期性的实践某种职责或等候处理某些暴发的轩然大波。例如httpd进度,一向处在运行情形,等待用户的拜会。还有不时用的crond进度,那一个进度类似与windows的安插职分,可以周期性的执行用户设定的少数职务。

用法示例

1、突显运行程序的PID

[root@localhost ~]# pidof sshd
34128 34059 28835 28820 24697 24627 23228 23215 1995

在体现的结果可以看看共有9个PID,则讲明服务器上9个经过均是由sshd启动的。

2、显示Shell的进程

[root@localhost ~]# cat test.sh
#!/bin/bash
i=1;
while [ $i -le 10000 ]
do
 echo $i
 i=$((i+1))
 sleep 120s
done
[root@localhost ~]# ./test.sh &
[root@localhost ~]# pidof -x test.sh
36554

3、突显指定程序的PID

[root@localhost ~]# pidof -s sshd
7524

4、忽略指定的PID

[root@localhost ~]# pidof sshd
9104 9103 7524 7434 4474 4462 1995
[root@localhost ~]# pidof sshd -o 1995
11979 11978 7524 7434 4474 4462

上半节课

3.进程的习性
(1)进程的三种状态
经过在启动后,不肯定即刻初叶运行,由此进度存在很各类状态。
可运行情形:处于那种情况的长河,要么正在运行、要么正准备运行。
可暂停的守候状态:那类进度处于阻塞状态,一旦达到某种条件,就会成为运行态。同时该情形的进度也会出于接到到信号而被提前提示进入到运行态。
不暂停的等待境况:与“可间歇的等候情形”含义基本相仿,唯一不一样的是处在这么些情况的历程对信号不做响应。
僵死状态:也就是僵死进度,每个进度在终结后都会处在僵死状态,等待父进度调用进而释放资源,处于本场馆的长河一度截止,但是它的父进度还并未自由其系统资源。
暂停状态:声明此时的历程暂时平息,来收取某种特殊处理,
(2)进程之间的涉及
在linux系统中,进度ID(用PID表示)是分别不一致进度的唯一标识,它们的大小是有限量的,最大ID为32768,用UID和GID分别表示启动这么些进程的用户和用户组。所有的长河都是PID为1的init进程的后裔,内核在系统启动的末梢阶段启动init进程,由此,那么些进程是linux下具有进度的父进度,用PPID表示父进程。
下边是因而ps命令输出的sendmail进度音信:
[[email protected]
~]# ps -ef|grep sendmail
UID PID PPID C STIME TTY TIME CMD
root 3614 1 0 Oct23 ? 00:00:00 sendmail: accepting connections
相持于父进度,就存在子进度,一般每个进度都必须有一个父进程,父进度与子进度之间是治本与被管理的关系,当父进度甘休时,子进度也随之消逝,可是子进度关闭,父进程不肯定终止。
如果父进度在子进度退出在此以前就淡出,那么所有子进度就改为的一个孤儿进度,假如没有对应的处理机制以来,这一个孤儿进度就会直接处于僵死状态,资源无法自由,此时缓解的方法是在启动的经过内找一个进程作为那几个孤儿进度的父进度,或者直接让init进度作为它们的父进程,进而释放孤儿进程占用的资源。

lsof

   
在Windows中删除文件时,会油但是生被并吞而暂时不能删除的情状,这些大家会一款相当好用的软件Unlocker,那么在Linux中接近的景色怎样处理了?前些天大家来学学lsof命令。
    lsof全称list open
files
。用于查看进度打开的文本、目录和套接字等新闻。

w
uptime

二、 进度的监督与管理
Linux下,监控和管理进程的通令有成千成万,下边大家以ps、top、pstree、lsof八个最常用的授命介绍如果可行的监督和管理linux下的种种进程。

主导用法

pidof [选项] [文件名]

其常用选项参数如下所示:

选项 说明
-?或-h 显示帮助信息
-a 显示打开文件存在的进程
-c 进程名 显示指定进程所打开的文件
-d FD 显示文件描述符(FD)占用的进程
+d 目录名 显示当前目录下被打开的文件
+D 目录名 递归显示当前目录下被打开的文件
-i 条件 显示符合条件的进程
-p pid 显示指定PID打开的文件
-u uid 显示指定UID打开的文件
-g 显示所属组标识符PGID
R 显示父进程PPID

内部选用 -i 辅助的准绳如下所示:

条件 说明 示例
4/6 IPv4/ IPv6 lsof -i
protocol UDP/TCP lsof -i TCP
hostname 网络主机名 lsof -i@localhost
hostaddr 网络地址 lsof -i@192.168.8.8
service 服务名称,可查看/etc/services lsof -i:ssh
port 端口 lsof -i:22

lsof输出的详细音信解释如下:

  • COMMAND:进度名称,要是名称较长,则默许只显示前9个字符
  • PID:进度标识符,假诺加上-R参数,则显得父进度PPID
  • USER:进度所有者,若是加上-g参数,则浮现组标识符PGID
  • FD:文件讲述符
  • TYPE:文件类型,常见类型如下所示:
    DIR:表示目录
    REG:表示平日文书
    CHR:表示字符类型
    BLK:表示块设备档次
    UNIX:表示UNIX套接字
    FIFO:表示先进先出队列
    IPv4:表示IPv4套接字
    IPv6:表示IPv6套接字

文本讲述符FD,但却足以代表两类内容:

  • 首先类是文件讲述符
    0:标准输入
    1:标准输出
    2:标准错误输出
    n:其余文件讲述符的数值

澳门金沙国际 1

  • 其次类描述文件特征的标识
    CWD:表示应用程序的当前工作目录,即程序启动的目录
    txt:表示文件类型为程序代码或数额
    mem:内存映射文件
    pd:父目录
    rtd:根目录
    DEL:表示文件已经去除但还设有于内存中

 

2.1 利用ps命令监控系统经过
ps是linux下最常用的进度监控命令,关于ps命令的语法和采纳选拔,大家在第四章早已有了详实的上书,那里根本讲述怎样拔取ps指令监控和管制种类经过。
请看上边的以身作则:
上边是apache进度的出口音讯
[[email protected]
~]#ps -ef | grep httpd
UID PID PPID C STIME TTY TIME CMD
nobody 7272 26037 0 Nov06 ? 00:00:00 /apache2/bin/httpd -k start
nobody 7274 26037 0 Nov06 ? 00:00:00 /apache2/bin/httpd -k start
nobody 7400 26037 0 Nov06 ? 00:00:00 /apache2/bin/httpd -k start
nobody 7508 26037 0 00:09 ? 00:00:00 /apache2/bin/httpd -k start
nobody 7513 26037 0 00:09 ? 00:00:00 /apache2/bin/httpd -k start
nobody 7515 26037 0 00:09 ? 00:00:00 /apache2/bin/httpd -k start
nobody 11998 26037 0 11:14 ? 00:00:00 /apache2/bin/httpd -k start
nobody 12941 26037 0 16:25 ? 00:00:00 /apache2/bin/httpd -k start
nobody 12979 26037 0 16:44 ? 00:00:00 /apache2/bin/httpd -k start
root 26037 1 0 Oct23 ? 00:00:00 /apache2/bin/httpd -k start
其中,UID是用户的ID标识号,PID是进度的标识号,PPID表示父进程,STIME代表经过的起步时间,TTY表示经过所属的极限控制台,TIME表示经过启动后累计利用的CPU总时间,CMD表示正在举行的一声令下。
从中可以清楚的来看,父进程和子进度的相应关系,
PPID为26037的有所进程均为子进度,而PID为26037的历程是所有子进度的父进度,子进度由nobody用户启动,而父进度由root用户启动,父进度对应的PPID为1,即父进度同时为init进程的子进度。
实际上也得以通过下边的命令形式查看子进度与父进度的呼应关系,请看如下操作:
[[email protected]
~]# ps auxf | grep httpd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 26037 0.0 0.1 6316 2884 ? Ss Oct23 0:00 /apache2/bin/httpd -k
start
nobody 7272 0.0 0.1 7016 3740 ? S Nov06 0:00 \_ /apache2/bin/httpd -k
start
nobody 7274 0.0 0.1 7016 3704 ? S Nov06 0:00 \_ /apache2/bin/httpd -k
start
nobody 7400 0.0 0.1 7012 3676 ? S Nov06 0:00 \_ /apache2/bin/httpd -k
start
nobody 7508 0.0 0.1 7012 3732 ? S 00:09 0:00 \_ /apache2/bin/httpd -k
start
nobody 7513 0.0 0.1 7012 3700 ? S 00:09 0:00 \_ /apache2/bin/httpd -k
start
nobody 12979 0.0 0.1 7016 3684 ? S 16:44 0:00 \_ /apache2/bin/httpd -k
start
nobody 12980 0.0 0.1 7012 3652 ? S 16:44 0:00 \_ /apache2/bin/httpd -k
start
nobody 12982 0.0 0.1 7016 3664 ? S 16:44 0:00 \_ /apache2/bin/httpd -k
start
nobody 22664 0.0 0.1 6880 3540 ? S 22:24 0:00 \_ /apache2/bin/httpd -k
start
里头,%CPU表示经过占用的CPU百分比,%MEM代表经过占用内存的比例,VSZ表示经过虚拟大小,RSS代表经过的莫过于内存(驻留集)大小(单位是页)。STAT代表经过的意况,进度的情形有很三种:用“R”表示正在运转中的进度,用“S”表示处于休眠状态的历程,用“Z”表示僵死进度,用“<”表示优先级高的长河,用“N”表示优先级较低的进度,用“s”表示父进度,用“+”表示位于后台的经过。START表示启动进度的年月。
其一例子将经过之间的关系用树形结构形象的象征出来,能够很明亮的看看,第二个进程为父进程,而其余进程均为子进程。同时从那个输出还是可以够见见各种进度占用CPU、内存的比重,还有进程所处的情状等等。

用法示例

1、通过文件定位占用的进程

[root@localhost ~]# top -d 2 > top.txt
[root@localhost ~]# lsof top.txt
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
  Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
top     8900 root    1w   REG    8,2    69035 469790741 top.txt

2、通过文件讲述符定位进程

[root@localhost ~]# lsof -d 5 | head -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
   Output information may be incomplete.
COMMAND  PID  USER   FD   TYPE      DEVICE SIZE/OFF NODE       NAME
systemd  1    root   5u   a_inode   0,10     0     7450       [signalfd]
Xvnc     2678 root   5u   IPv6      41776    0t0   TCP *:6003 (LISTEN)

3、通过进度定位文件

[root@localhost ~]# ps -ef |grep -i  mysql | grep -v grep
mysql 2680  1  2 7月19 ?  11:44:50 /usr/libexec/mysqld --basedir=/usr
[root@localhost ~]# lsof -p 2680 | head -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
     Output information may be incomplete.
COMMAND  PID  USER   FD    TYPE  DEVICE SIZE/OFF  NODE   NAME
mysqld  2680  mysql  cwd   DIR   8,2    4096      319571 /var/lib/mysql
mysqld  2680  mysql  rtd   DIR   8,2    254       512    /

4、查看用户打开的公文

[root@localhost ~]# lsof -u root | tail -3
lsof:WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
   Output information may be incomplete.
COMMAND   PID   USER  FD     TYPE DEVICE  SIZE/OFF NODE NAME
kworker/3 39337 root  cwd    DIR  8,2     254      512  /
kworker/3 39337 root  rtd    DIR  8,2     254      512  /
kworker/3 39337 root  txt   unknown                     /proc/39337/exe

5、查看程序所占用的端口

[root@localhost ~]# lsof -i:22
COMMAND PID    USER   FD  TYPE  DEVICE      SIZE/OFF NODE NAME
sshd    27597  root   3u  IPv4 1460505039   0t0      TCP *:ssh (LISTEN)
sshd    27597  root   4u  IPv6 1460505041   0t0      TCP *:ssh (LISTEN)

下半节课

2.2利用pstree监控连串经过
pstree命令以树形结构展现程序和经过之间的涉及,使用格式如下:
pstree [-acnpu] [<PID>/<user>]
选用含义如下:
-a  呈现启动每个过程对应的共同体指令,包蕴启动进度的门径、参数等等。
-c  不接纳精简法突显进度新闻,即显示的进度中包蕴子进程和父进程。
-n  根据进度PID号来排序输出,默许是以程序名称排序输出的。
-p  呈现进程的PID。
-u  突显进度对应的用户名称。
PID:即经过对应的PID号,或者叫进度识别号。
user:系统用户名。
pstree清楚的展现了先后和经过之间的关联,假如不点名进程的PID号,或者不点名用户名称,则将以init进度为根进度,突显系统的有所程序和进度音讯,若指定用户或PID,则将以用户或PID为根进度,显示用户或PID对应的兼具程序和经过。
举例如下:
若果想精通某个用户下都启动了怎么样过程来说,pstree指令可以很不难达成,上面显示mysql用户下相应的进程音信,执行如下命令:
[[email protected]
~]# pstree mysql
mysqld—6*[{mysqld}]
该出口展现了mysql用户下相应的进度为mysqld,并且mysqld进程具有5个子进程(5个子进度加一个父进程,共6个经过)。
为了更详尽的垂询各样进程的音讯,例如每个子进度和父进度对应的PID,执行如下命令:
[[email protected]
~]# pstree -c -p mysql
mysqld(18785)-+-{mysqld}(18787)
|-{mysqld}(18788)
|-{mysqld}(18789)
|-{mysqld}(18790)
|-{mysqld}(18791)
`-{mysqld}(29625)
通过“-p、-c”参数,清楚的显得了父进程和子进度,以及它们各类的PID。
倘使知道进度对应的PID,想获得进度是由哪个用户启动的,可以实施如下命令:
[[email protected]
~]# pstree -u 26037
httpd—10*[httpd(nobody)]
从地点可见,httpd进度是由nobody用户启动的。
一旦要查看httpd父过程和每个子进度分别对应的PID,可以实施如下命令组合:
[[email protected]
~]# pstree -u -p 26037
httpd(26037)-+-httpd(24562,nobody)
|-httpd(24563,nobody)
|-httpd(24566,nobody)
|-httpd(24567,nobody)
|-httpd(24631,nobody)
|-httpd(24648,nobody)
|-httpd(24650,nobody)
|-httpd(24654,nobody)
|-httpd(26156,nobody)
`-httpd(29014,nobody)
假诺要博得启动httpd进度的次第路径、参数组合,执行如下命令:
[[email protected]
~]# pstree -a -u -p 26037
httpd,26037 -k start
|-httpd,24563,nobody -k start
|-httpd,24566,nobody -k start
|-httpd,24567,nobody -k start
|-httpd,24631,nobody -k start
|-httpd,24648,nobody -k start
|-httpd,24650,nobody -k start
|-httpd,24654,nobody -k start
|-httpd,26156,nobody -k start
`-httpd,29014,nobody -k start

fuser

    fuser紧要用来体现进程正在选拔的公文、套接字、挂载点等。

top
kill命令
vmstat
ps
free
netstat
ulimit
sar
lsof
pidof

2.3 利用top监控系统经过
top命令是督查连串经过必不可少的工具,与ps命令相比较,top命令动态、实时的显得进度情形,而ps只可以突显进度某一时刻的音信,同时,top命令提供了一个互为界面,用户可以依照需要,人性化的定制自己的出口,更了然的打听进程的实时气象。
有关top指令的用法,在第四章早已有了详实的介绍,那里透过多少个例证,演说一下top命令在系统经过监控中的作用和长处。
下边那么些事例是某系统在某时刻执行top命令后的出口:
[[email protected]
~]# top
Tasks: 126 total, 1 running, 123 sleeping, 1 stopped, 1 zombie
Cpu(s): 0.8% us, 0.1% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 8306544k total, 8200452k used, 106092k free, 234340k buffers
Swap: 8385888k total, 160k used, 8385728k free, 7348560k cached

宗旨用法

fuser [选项] [文件名]

其常用选项如下所示:

选项 说明
-a ,–all 显示命令行中指定的所有文件
-c 同-m选项,用于兼容POSIX
-k, –kill 杀掉使用文件的进程
-i, –interactive 杀掉进程前需要用户确认,如果无-k参数则默认忽略该参数
-l, –list-signals 显示所有已知的 signal名称
-m NAME, –mount NAME 指定一个挂载的文件系统或被挂载的设备
-n SPACE 指定一个不同的命名空间,支持不同的命名空间文件(默认为文件名)、UDP(本地UDP端口)、TCP(本地TCP端口),为避免歧义,可以使用name/space形式,如80/tcp
-w 仅杀掉拥有写入权限的进程,如果无-k参数则默认忽略该参数
-s, –silent 静默模式,-u和-v忽略该参数
-u, –user 在PID后显示所属的用户名
-v, –verbose 显示详细信息
-4, –ipv4 仅搜索IPv4的套接字
-6, –ipv6 仅搜索IPv6的套接字

fuser显示指定文件或文件系统的长河PID,在默许情势中,每个文件名背后会用一个假名代表访问类型,如下所示:

  • c:表示当前目录
  • e:表示该文件为可执行文件
  • f:表示被打开的文本,默许情势中f不显得
  • F:表示被打开的文本,用于写入操作,默许情势中F不出示
  • r:根目录
  • m:映射文件或共享lib

-f 和 -F 只有与选项 -v 一起使用的时候才会显示,其他情况则默认不显示

 

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21115 root 23 0 1236m 360m 2384 S 6 4.4 382:24.14 java
30295 root 16 0 3552 984 760 R 1 0.0 0:00.09 top
30118 nobody 15 0 6904 3132 1676 S 0 0.0 0:00.47 httpd
30250 nobody 15 0 6900 3088 1660 S 0 0.0 0:00.06 httpd
1 root 16 0 1780 552 472 S 0 0.0 0:01.25 init
从top命令的输出可见,此系统有java和httpd五个用户进度在运作。
进度PID为21115的java进度由root用户起步,优先级(PR)为23,占用的虚拟内存总量(VIRT)为1236M,未被换出的情理内存(RES)为360M,共享内存(SHR)为2384
kb。通过那多少个选项可以精晓java进程对内存的使用量,有助于系统管理员对系统虚拟内存使用情形的掌控。
此刻java进度处于休眠状态(S),从上次立异到近年来java占用cpu时间(%CPU)为6%,占用物理内存(%MEM)为4.4%,从进度启动到今天java占用cpu总时间(TIME+)为“382:24.14”,单位是1/100秒。通过了然那些新闻,可以使系统管理员了然java进程对系统CPU、物理内存的运用情况。
七个httpd进度由nobody用户启动,优先级都为15,同时都地处休眠状态。
除开那四个经过,还有top进度,也就是大家实施top命令发生的历程,从进度情形项可见,此进度处于运行情状,另一个是init进程,即怀有系统经过的父进程,对应的PID为1。
理所当然top的输出还有许多进程信息,那里唯有拿出前多少个经过展开第一讲解,明白其余进度的含义基本与那个相同。

用法示例

1、杀掉所有占用/home的历程

[root@localhost ~]# fuser -km /home

2、显示本地所有mysql上端口进度

[root@localhost ~]# fuser mysql/tcp
mysql/tcp:            2680

3、显示详细的新闻

[root@localhost ~]# fuser -v top.txt
                     用户     进程号  权限   命令
/root/top.txt:       root     15847 F....  top

4、查看有几个进程正在选择某个目录下文件系统,包罗子目录

[root@localhost ~]# fuser -v -m /home/data
                     用户     进程号 权限   命令
/home/data:          root     kernel mount /home/data

5、通过端口定位进程

[root@localhost ~]# fuser -v -n tcp 22
                     用户     进程号 权限   命令
22/tcp:              root      27597 F.... sshd
                     root      31119 F.... sshd
或
[root@localhost ~]# fuser -v 22/tcp
                     用户     进程号 权限   命令
22/tcp:              root      27597 F.... sshd
                     root      31119 F.... sshd

 

2.4 利用lsof监控连串经过与程序
lsof全名list opened
files,也就是列举系统中一度被打开的文件,通过lsof,我们就足以按照文件找到呼应的经过音信,也足以根据进度音信找到进度打开的公文。
lsof指令功用强大,那里介绍“-c,-g,-p,-i”那多个最常用参数的应用。更详细的牵线请参见man
lsof。
lsof filename:展现应用filename文件的历程。
如若想精通某个特定的文件由哪位进度在应用,可以经过“lsof
文件名”格局赢得,例如:
[[email protected]
~]# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
syslogd 2027 root 1w REG 8,6 43167 31916 /var/log/messages
从这些输出可见,/var/log/messages文件是由syslogd进度在动用。
lsof -c abc :显示abc进程现在打开的文书,例如:
[[email protected]
~]# lsof -c nfs
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
nfsd4 2761 root cwd DIR 8,3 4096 2 /
nfsd4 2761 root rtd DIR 8,3 4096 2 /
nfsd4 2761 root txt unknown /proc/2761/exe
nfsd 2762 root cwd DIR 8,3 4096 2 /
nfsd 2762 root rtd DIR 8,3 4096 2 /
nfsd 2762 root txt unknown /proc/2762/exe
nfsd 2763 root cwd DIR 8,3 4096 2 /
nfsd 2763 root rtd DIR 8,3 4096 2 /
nfsd 2763 root txt unknown /proc/2763/exe
上例显示了nfs进度打开的文书新闻,FD列表示文件描述符,TYPE列显示文件的品种,SIZE列突显文件的轻重缓急,NODE列呈现本地文件的node码,NAME列呈现文件的全路径或挂载点。
lsof -g gid:呈现指定的进程组打开的公文景况,例如:
[[email protected]
~]# lsof -g 3626
COMMAND PID PGID USER FD TYPE DEVICE SIZE NODE NAME
sendmail 3626 3626 smmsp cwd DIR 8,8 4853760 32714
/var/spool/clientmqueue
sendmail 3626 3626 smmsp rtd DIR 8,10 4096 2 /
sendmail 3626 3626 smmsp txt REG 8,9 732356 1152124
/usr/sbin/sendmail.sendmail
sendmail 3626 3626 smmsp mem REG 8,10 106397 1158794 /lib/ld-2.3.4.so
sendmail 3626 3626 smmsp mem REG 8,10 95148 1175044
/lib/libnsl-2.3.4.so
………….省略……………
sendmail 3626 3626 smmsp 3u unix 0xf41e5bc0 9592 socket
sendmail 3626 3626 smmsp 4wW REG 8,8 50 523293 /var/run/sm-client.pid
里头,PGID列表示经过组的ID编号。
上边输出,展现了sendmail程序当前打开的富有文件、设备、库及套接字等。
lsof -p
PID:PID是进程号,通过进程号突显程序打开的兼具文件及相关进程,例如,想领会init进度打开了怎么文件的话,可以执行“lsof
-p 1”命令,输出结果如下:
[[email protected]
~]# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,10 4096 2 /
init 1 root rtd DIR 8,10 4096 2 /
init 1 root txt REG 8,10 32684 897823 /sbin/init
init 1 root mem REG 8,10 56320 2175328 /lib/libselinux.so.1
init 1 root mem REG 8,10 106397 1158794 /lib/ld-2.3.4.so
init 1 root mem REG 8,10 1454462 1161560 /lib/tls/libc-2.3.4.so
init 1 root mem REG 8,10 53736 1158819 /lib/libsepol.so.1
init 1 root 10u FIFO 0,13 966 /dev/initctl

fuser与lsof对比

对比项 fuser lsof
定位方式 通过文件查找进程 通过进程查找文件
所属标准 POSIX
参数类型 文件/网络端口 文件/PID/网络端口
进程输出 PID PID详细信息
是否可发送信息 可以,使用-k 不可以

 

lsof -i
通过监听指定的商谈、端口、主机等新闻,呈现符合条件的进度新闻。
利用语法为:
lsof -i [46] [protocol][@hostname][:service|port]
46:4代表IPv4,6代表IPv6。
protocol:传输协议,能够是TCP或UDP。
hostname:主机名称或者IP地址。
service:进程的劳务名,例如nfs、ssh、ftp等。
port:系统中劳动对应的端口号。例如http服务默许对应80,ssh服务默许对应22等等。
例如:
显示系统中tcp协议对应的25端口进度音信:
[[email protected]
~]# lsof -i tcp:25
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sendmail 2252 root 4u IPv4 5874 TCP localhost:smtp (LISTEN)
显示系统中80端口对应的进度新闻:
[[email protected]
~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 16474 nobody 3u IPv6 7316069 TCP *:http (LISTEN)
httpd 16475 nobody 3u IPv6 7316069 TCP *:http (LISTEN)
httpd 16578 nobody 3u IPv6 7316069 TCP *:http (LISTEN)
突显本机udp协议对应的53端口开启的长河新闻:
[[email protected]
~]# lsof
[email protected]:53
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
named 21322 named 20u IPv4 9130640 UDP localhost:domain
透过lsof命令可以领悟的打听进程和文书以及程序之间的呼应关系,熟稔了解lsof的施用,对linux的进程管理有很大扶持。

ps

   
在Windows系统中用来查看进度平日是透过职分管理器。而在Linux中,我们用ps(Process
Status)命令来查看进程。

 

、进度的概念和归类 1.进程的定义
Linux是一个多用户多义务的操作系统。多用户是指五个用户可以在同一时间使用同一个linux系统;多…

宗旨用法

ps [选项]

其常用选项如下所示:

选项 说明
-A 显示所有进程,同选项-e
-a 显示所有进程,但排除新会话的首进程和无控制终端的进程
-d 显示所有进程,但排除新会话的首进程
-e 显示所有进程,同选项-A
r 仅显示正在运行的进程
-C cmdlist 显示指定命令的进程信息
-p pidlist 显示指定PID的进程
-t ttylist 显示指定tty的进程
-u userlist 显示指定有效用户ID或名字的进程
-c 显示CLS和PRI列
-f 添加详细列信息,通常与其他选项联合使用
-x 没有关联到终端上的进程也进行显示
-o 仅显示自定义的列
-l 仅显示属于当前登录用户的PID与相关信息列表
–sort spec 对输出信息进行排序 + 升序排序 – 降序排序

 

用法示例

1、不带参数的以身作则

[root@localhost ~]# ps
  PID TTY          TIME CMD
11047 pts/0    00:00:00 ps
24892 pts/0    00:00:00 su
25142 pts/0    00:00:00 bash

2、仅呈现与当下用户相关的历程和相关消息

[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 R     0 22720 25142  0  80   0 - 38292 -      pts/0    00:00:00 ps
4 S     0 24892 22641  0  80   0 - 58599 do_wai pts/0    00:00:00 su
4 S     0 25142 24892  0  80   0 - 29305 do_wai pts/0    00:00:00 bash
  • F:表示经过申明,表明当前进程的权限,若为4代表经过权限为root,若为1意味着些子进度仅可举办复制(fork)而一筹莫展实际运作
  • S:表示经过意况,首要景况有:
      R:进程正在运转
      S:进度处于睡眠情形,但足以被升迁
      D:进度处于不可被唤起的歇息景况,常常该进度可能在等候I/O
      T:甘休状态,可能是在工作控制或除错状态
      Z:僵尸状态,举行已经终止但却无所适从自由内存等
  • UID/PID/PPID:举行的所属UID/PID/PPID
  • C:CPU使用率,单位为%
  • PRI/NI:Priority/Nice缩写,表示经过被CPU执行的优先级,数值越小越快被CPU执行
  • ADDR:与内存相关,ADDR代表该进程在内存的哪些部分,即使是Running进度,会展现 –
  • SZ:与内存相关,表示该进程使用了多少内存;
  • WCHAN:与内存相关,表示该进度如今是还是不是正在运转,-表示正在运转中
  • TTY:启动进度的极端名称
  • TIME:进度的实在CPU占用时间之和,单位为秒
  • CMD:进度命令

3、查看系统具有进度

[root@localhost ~]# ps aux
USER PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root   2  0.0  0.0      0     0 ?        S    8月08   0:00 [kthreadd]
root   3  0.0  0.0      0     0 ?        S    8月08   0:03 [ksoftirqd/0]
root   5  0.0  0.0      0     0 ?        S<   8月08   0:00 [kworker/0:0H]
root   8  0.0  0.0      0     0 ?        S    8月08   0:00 [migration/0]
  • USER:进度所属用户
  • PID:进度标识符
  • %CPU:进程的CPU占比
  • %MEM:进度物理内存占比
  • VSZ:进度虚拟内存(KB)使用量
  • RSS:进度占用的固定内存量(KB)
  • TTY:启动进度的终极名称
  • STAT:进度意况
  • START:进度启动时间
  • TIME:进程的实际上CPU占用时间之和
  • COMMAND:进程命令

在Linux中ps常常有二种区其他书写格式

  • BSD格式:选项前不加短横线 – ,七个选项可以结合使用如ps aux
  • UNIX格式:选项前加短横线 -,三个选项可以组成使用如ps -aux
  • GNU长格式:选项前加双短横线 –,如 ps –context

为此ps aux 和ps -aux 在体现的输出音信是同一的。

4、呈现自定义列

[root@localhost ~]# ps -eo pid,user,cmd
PID USER     CMD
  2 root     [kthreadd]
  3 root     [ksoftirqd/0]
  5 root     [kworker/0:0H]
  8 root     [migration/0]

5、对输出结果举办排序

[root@localhost ~]# ps -ef --sort=uid,-ppid,+pid
UID  PID    PPID  C STIME TTY        TIME CMD
root 31637 31624  0 17:42 pts/1  00:00:00 less -s
root 40772 25142  0 17:44 pts/0  00:00:00 ps -ef --sort=uid,-ppid,+pid
root 40773 25142  0 17:44 pts/0  00:00:00 more
root 25142 24892  0 15:32 pts/0  00:00:00 bash
root 31624 24164  0 17:42 pts/1  00:00:00 man ps
root 24164 23955  0 15:32 pts/1  00:00:00 bash
root 23955 23586  0 15:32 pts/1  00:00:00 su root
root 24892 22641  0 15:32 pts/0  00:00:00 su root

 

pstree

   
在应用ps查看进度极度有利于,但若想查看详细进度和子进程时,则要求选拔pstree全命令。由于pstree不是系统自带,要求活动设置

yum -y install pstree

监控种类状态命令:w, vmstat, uptime ,top

主导语法

pstree [选项]

常用选项如下所示:

选项 说明
-a 显示每个进程的完整指令,包括路径、参数等
-h 高亮显示当前进程及父进程
-g 显示PGID
-n 相同父进程下,按各自的PID进行排序
-p 显示PID
-s 显示父进程
-u username 显示UID信息

 

kill

   
在Windows系统中,当某个一个程序出现假死或无影响时,我们日常打开义务管理器,找到呼应的历程,然后杀掉该进度。在命令行盛行的Linux中,我们该选择哪个命令?常用于杀掉进度的命令非kill莫属了。

 

中央用法

kill [选项] [PID]

其常用选项如下所示:

选项 说明
-s signal 向目标进程发送指定的信号类型,信号可以为名称或数字
-l 显示信号名称列表,如果在-l加编号则查看信号名称,反之亦然
-a 处理当前进程时,不限制命令和PID的对应关系
-p 指定kill命令仅显示相关进程的进程号,而不发送任何信号
  • 无选项:表示向目的经过发送默许的停下信号,即SIGTERM
  • PID>0:表示向目的经过发送信号,此处的PID能够是五个PID,用空格举行分隔
  • PID=0:表示向当前历程组的有所过程发送信号
  • PID=-1:表示向除当前 kill 进度和 init 进程之外的兼具进程发送信号
  • PID<-1:表示向经过组PGID的具有进度发送信号,如-123,则向进度组PGID为123的享有进度发送信号

w

用法示例

1、展现信号列表
澳门金沙国际 2

除以上呈现信号,还有一个例外的编号0为测试信号,其职能如下:

  • 用来测试对象经过是不是存在

[root@localhost ~]# kill -l 0
T
[root@localhost ~]# kill -0 99999
bash: kill: (99999) - 没有那个进程
  • 用来测试当前用户是或不是持有向该进度发送信号的权杖

[admin@localhost ~]# kill -0 2325
bash: kill: (2325) - 操作不被允许

2、查看信号对应的编号或名称

[root@localhost ~]# kill -l SIGHUP
1
[root@localhost ~]# kill -l KILL
9
[root@localhost ~]# kill -l 9
KILL

在Linux中常用信号如下所示:

信号名称 编号 解释
HUP 1 终端断线
INT 2 中断(同Ctrl+C)
QUIT 3 退出(同Ctrl+)
KILL 9 强制终止
TEEM 15 终止
CONT 18 继续(与STOP相反)
STOP 19 暂停(同Ctrl+Z)

3、强制停止进度

[root@localhost ~]# kill -9 26744
[root@localhost ~]# kill -kill 30470

在应用kill -9须求留意的事项如下所示:

  • kill不可能杀死进度为1的init进程
  • 在使用kill
    -9时是强行终止进度且从未打招呼目的经过展开自己清理,而是突然被搁浅,可以造成资源不能正常释放,数据无法共同到磁盘等,在运用前须要三思

正文同步在微信订阅号上发表,如各位小伙伴们喜欢自己的小说,也得以关怀自我的微信订阅号:woaitest,或扫描下边的二维码添加关怀:
澳门金沙国际 3

# w
12:27:16 up 16 min (运作天数), 2 users (当下系统登录用户数
固然要删减某个用户可以查阅有多少用户登录了系统)
,

load average: 0.06, 0.03, 0.00 单位时间段内CPU平均消耗 

四个数分别表示分裂时间段的序列平均负载(一分钟、五分钟、十五分钟)
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 – 12:26 5.00s 0.01s 0.00s -bash (本地用户
root pts/0 192.168.0.101 12:26 0.00s 0.07s 0.00s
w  (长距离用户

澳门金沙国际 4

 

留意:load
average的最大值不可以超越CPU逻辑核数,比如8逻辑核CPU,load
average不可以已毕9.00 !

每一遍远程连接Linux都会显得w命令音信

 15:18:09 up 4 days, 21:19,  2 users, 
load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
steven   pts/0    113.x.x.x  15:15   41.00s  0.01s  0.02s sshd: steven
[priv]
steven   pts/1     113.x.x.x
15:18    0.00s  0.01s  0.02s sshd: steven [priv]

 

ab(apache benchmark测试工具):测试apache

 

uptime

# uptime
14:43:50 up 2 days, 20:45, 1 user, load average: 0.00, 0.00, 0.00

 

 


 

下半节课

 

 

top

# top
top – 14:46:57当下时光 up 2 days, 20:48 已经运行了稍稍时间, 1 user, load
average: 0.00, 0.00, 0.00
Tasks: 89 total 89个进程, 1 running, 88 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa io等待cpu, 0.0%hi,
0.0%si, 0.0%st
Mem: 1922484k total 2G内存, 449604k used, 1472880k free, 166384k buffers
Swap: 0k total 无swap, 0k used, 0k free, 173156k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19356 1492 1192 S 0.0 0.1 0:00.58 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

us:用户态
sy:内核态
wa:wait等待时间
id:空闲
ni:优先值
buffer:缓冲
cache:缓存
上边部分
PR:优先级
NI:NICE 优先值 -20~19 数值越小优先级越高,用户层概念 nice
值可调动的限量为 -20 ~ 19 # nice [-n 数字] command
VIRT:虚拟内存 
RES+SWAP,包括mmap分配的内存
RES:真正内存 没有被换出的, 要关注
SHR:共享内存
S:状态
%CPU:CPU百分比 top默认以CPU排序
8逻辑核CPU 当%CPU为800的时候 才表明CPU才完全占满
%MEM:内存百分比
TIME+:在CPU运行了多久
COMMAND:命令

 

用以动态监控进度所占系统资源,每隔3秒变五回。
RES 这一项为经过所占内存大小,而 %MEM 为利用内存百分比
按 “shift + m”,
可以根据内存使用大小排序。

按 “shift + p”,
可以根据CPU使用排序。

按数字 ‘1’
可以列出各颗cpu的施用状态。

top -bn1 它代表非动态打印系统资源使用状态,可以用在shell脚本中
top -c 最右侧的一声令下可以来得更详实的音讯 例如命令路径

 

 

kill命令

少使用  kill -9 进程ID 
尽量用  killall 进程名 

 

w,uptime,top呈现的第一行都是同等的

 

 

 

vmstat

#vmstat 1  //每一秒打印一次
#vmstat 1 10   //每一秒打印一次 打印十次后结束打印

-t参数:执行vmstat命令,该命令将会在每一行输出后都带一个光阴戳   vmstat
-t  1 5
-s参数:将出口各个风浪计数器和内存的计算新闻。   vmstat -s
-d参数:将会输出所有磁盘的计算新闻。  vmstat -d
-S和-M参数:(大写和MB)将会以MB为单位输出。vmstat默认以KB为单位输出计算音信。
 vmstat -S -M  1  5

vmstat各目的意义:

–proc进度有关——————————————————————————-
r :run
表示运行和等候cpu时间片的进程数,借使长时间过量服务器cpu的个数,则申明cpu不够用了;
b :表示等待资源的进程数,比如等待I/O,
内存等,那列的值如若长日子大于1,则必要关爱一下了
–swap
沟通分区相关的—————————————————————————
si :由交流区进入内存的数据; swap–》内存
so :由内存进入互换区的数目;
–io
磁盘—————————————————————————————
bi :从块设备读取数据的量(读磁盘); 磁盘–》内存
bo: 从块设备写入数据的量(写磁盘);
–system
系统相关的———————————————————————–
in : 每秒的软中断次数,蕴含时钟中断;
cs : 每秒的上下文切换次数;
–cpu
cpu相关的———————————————————————–
wa :表示I/O等待所占用cpu时间百分比.
us :用户态
sy :内核态
id :空闲


 

 

ps
ps 查看系统经过  process show

-A 展现所有进度(等价于-e)(utility)
-a 突显一个巅峰的有着进度,除了会话引线
-C  ps -C nginx 只显示某个程序的拥有进度
-N 忽略选拔。
-d 彰显所有进程,但简单所有的对话引线(utility)
-x
展现没有决定终端的进程,同时呈现各种命令的求实途径。dx不可合用。(utility)
-p pid 进度使用cpu的大运
-u uid or username 拔取有效的用户id或者是用户名
-g gid or groupname 呈现组的富有进程。
U username 突显该用户下的有所进度,且突显种种命令的详尽路径。如:ps U
zhang;(utility)
-f 全部列出,平常和其余选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式突显
s 以信号格式彰显
-m 展现所有的线程
-H 突显进度的层系(和其它的下令合用,如:ps -Ha)(utility)
e 命令之后显得环境(如:ps -d e; ps -a e)(utility)
h 不展现第一行

ps aux / ps -elf
PID
:进度的id,那个id很有用,在linux中根本管理进程就得靠pid来甄别和治本某一个程,
譬如自己想终止某一个经过,则用 ‘kill
进度的pid’有时并不可能杀死,则要求加一个-9选项 kill -9 进度pid

ps aux
%CPU 进程的cpu占用率
%MEM 进度的内存占用率
VSZ 进度所选拔的虚存的尺寸(Virtual Size)
RSS 进度使用的驻留集大小或者是实在内存的大小,单位 KB。

 

 ps -eo ppid,pid,user,args |grep mysql
 1  7348 root     /bin/sh /usr/local/mysql/bin/mysqld_safe
–datadir=/data/mysql/mysql3306/data
–pid-file=/data/mysql/mysql3306/tmp/mysql.pid
 7348  8463 mysql    /usr/local/mysql/bin/mysqld
–basedir=/usr/local/mysql –datadir=/data/mysql/mysql3306/data
–plugin-dir=/usr/local/mysql/lib/plugin –user=mysql
–log-error=/data/mysqlmysql3306/logs/error.log
–pid-file=/data/mysql/mysql3306/tmp/mysql.pid
–socket=/data/mysql/mysql3306/tmp/mysql.sock –port=3306

ps axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:00 \_ [migration/0]
2 4 0 0 ? -1 S 0 0:18 \_ [ksoftirqd/0]

STAT :表示经过的图景,进度情状分为以下两种
D 不可以暂停的长河(平时为IO)
R 正在运行中的进度
S 已经暂停的历程,系统中大部进程都是这些境况
T 已经终止或者暂停的历程,尽管大家正在运行一个限令,比如说 sleep 10
若是大家按一下ctrl -z 让他暂停,那么大家用ps查看就会展现T这一个境况
X 已经死掉的进度(这么些从未会油不过生)
Z
僵尸进度,杀不掉,打不死的废料进度,占系统一小点资源,不过并未关联。要是太多,就有标题了,只好重启服务器解决。
< 高优先级进度
N 低优先级进度
L 在内存中被锁了内存分页
s 主进程
l 二十四线程进度

  • 在前台的经过

 

watchdog:监视极度重大的长河,发现死掉的话帮忙拉起主要进程

 

 

 

free

查看内存使用处境

-b  以Byte为单位突显内存使用意况。
-k  以KB为单位出示内存使用情形。
-m  以MB为单位出示内存使用意况。
-g   以GB为单位突显内存使用景况。
-o  不显得缓冲区调节列。
-s   <间隔秒数>  持续观察内存使用景况。
-t  突显内存总和列。
-V  展现版本音信。
free 默许以k为单位出示
mem(total):内存总数;
mem(used):已经分配的内存;
并不是确实已用

mem(free):未分配的内存;
 并不是真正剩余内存

mem(buffers):系统分配但未被应用的buffers;
mem(cached)系统分配但未被运用的cache
buffers/cache(used):实际使用的buffers与cache
总量,也是实际应用的内存;

buffers/cache(free):未被选择的buffers与cache和未被分配的内存之和,那就是系统
 当前实际上可用内存

buffers是快要要被写入磁盘的
cached是被从磁盘中读出来的

 

redhat7支持  free -h 

系统启动的时候就会从内存拿出一部分内存作为buffers和cached

 

 

netstat
netstat 查看网络情状 一遍握手 三遍挥手
输出分为两有些:一个是TCP/IP网络部分,另一个是Unix socket部分
Unix socket是本机内的进度间通讯,而且连接格外多
-n :突显ip ,不出示机器名
netstat -lnp
查看当前系统开启的端口以及socket,所有ip,比如十个ip,十个ip都监听
netstat -an 查看当前系统具有的连续情形
netstat -lntp 只有tcp,不列出socket
netstat -lnup 只有udp,不列出socket
netstat -an|awk ‘/ESTABLISHED/’|wc -l 检查机器并发

 

 

zabbix监听端口:10050
mysql监听端口:3306
nginx监听端口:80
stmp sendmail监听端口:25

sendmail和postifx都可以发邮件

 

 

sar

sysstat软件包包括sar、iostat、mpstat多个指令,iostat的cpu总计和磁盘计算跟sar命令大致
sar查看网络状态 跟vmstat用法大概 1 10 每隔一秒打印,打印10次截至
并未这么些命令,使用  yum install -y sysstat 
网卡流量  n:network  DEV device  sar -n
DEV ,  sar -n DEV 1 10 
读取指定文件数量,不加-f 默许突显明天黎明先生到今天驾鹤归西: sar -n DEV -f /var/log/sa/sa24  
查看历史负载  sar -q  ldavg 1分钟5分钟 15分钟
翻看磁盘读写  sar -b  bread/s bwrtn/s

澳门金沙国际 5

查看网络状态还有此外一个工具:iftop

笔录文件需要敞开sysstat服务:ls /etc/init.d/sysstat

 

 


翻看cpu的个数和核数

cpu核数

cat /proc/cpuinfo
cat /proc/cpuinfo |grep ‘core id’
processor :线程数  逻辑焦点数   从0初叶算  ,衡量品质
core id:主旨数  物理中央数 从0开端算

 

 

 cat
/proc/cpuinfo |grep processor
  //唯有一个逻辑核
processor : 0

 # cat
/proc/cpuinfo |grep ‘core
id’
  //唯有一个物理核
core id : 0


并发连接数不会当先65536  文件讲述符 socket文件连续 最大65535
ulimit -n

 

# ulimit -a    //腾讯云
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14860
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 100001   //10W  关注
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14860     //  关注
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

ulimit -a    //家里centos6
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7764
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7764
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

 

楼方鑫HZ(37223884)  17:24:34
起动onecache前要设一下ulimit -n
ulimit -n 16384

 

概述

系统特性平昔是一个受关切的话题,怎样通过最容易易行的安装来贯彻最管用的特性调优,怎样在有限资源的

条件下有限辅助程序的运行,ulimit
是咱们在处理这么些题材时,平日利用的一种简易手段。

ulimit 是一种
linux**
系统的内建职能,它具备一套参数集,用于为由它生成的
shell 进度及其子进度的资源利用安装限定**。

本文将在背后的章节中详尽表明 ulimit
的功能,使用以及它的影响,并以具体的事例来详细地讲演它在限制资

源使用方面的熏陶。

 

 

ulimit 的功力和用法

ulimit 功效简述
如若有那样一种意况,当一台 Linux 主机上还要登陆了 10
个人,在系统资源无限制的动静下,
那 10 个用户同时开辟了 500 个文档,而一旦每个文档的轻重有
10M,那时系统的内存资源就
会遭逢巨大的挑衅。

而事实上行使的条件要比那种借使复杂的多,例如在一个嵌入式开发条件中,各州点的资源都是充足
缺少的,对于开启文件讲述符的数据,分配堆栈的分寸,CPU
时间,虚拟内存大小,等等,都有非
常严俊的需要。资源的客体范围和分配,不仅仅是保障系统可用性的要求条件,也与系统上软件运
行的质量有所密不可分的牵连。那时,ulimit
可以起到很大的功能,它是一种简易并且有效的落到实处
资源限制的方法。

ulimit 用于限制 shell
所占据的资源,帮忙以下各种类型的限定:所创办的基础文件的大
小、进度数据块的大小、Shell
进度创制文件的轻重缓急、内存锁住的轻重缓急、常驻内存集的大大小小、打开
文件讲述符的数据、分配堆栈的最大尺寸、CPU
时间、单个用户的最大线程数、Shell 进度所能使
用的最大虚拟内存。同时,它援救硬资源和软资源的范围。

用作临时限制,ulimit 可以功效于通过动用命令登录的 shell
会话,在对话终止时便停止限制,并

不影响于任何 shell
会话
。而对此久远的平昔限制,ulimit
命令语句又可以被添加到由登录 shell 读

取的公文中,成效于特定的 shell
用户

 

ulimit
通过一些参数选项来管理分裂类型的系统资源。在本节,大家将执教这个参数的运用。

ulimit 命令的格式为:ulimit [options] [limit]
具体的 options 含义以及不难示例可以参考以下表格。

表 1. ulimit 参数表达
选项 [options]
含义
例子

-H
设置硬资源限制,一旦设置不可能增添。
ulimit – Hs 64;限制硬资源,线程栈大小为 64K。

-S
设置软资源限制,设置后得以增加,不过不能跨越硬资源设置。
ulimit – Sn 32;限制软资源,32 个文本讲述符。

-a
显示当前有所的 limit 音讯。
ulimit – a;展现当前颇具的 limit 音信。

-c
最大的 core 文件的尺寸, 以 blocks 为单位。
ulimit – c unlimited; 对转移的 core 文件的高低不开展限定。

-d
进度最大的数据段的大大小小,以 Kbytes 为单位。
ulimit -d unlimited;对进程的数量段大小不开展限定。

-f
进度可以成立文件的最大值,以 blocks 为单位。
ulimit – f 2048;限制进度可以创制的最大文件大小为 2048 blocks。

-l
最大可加锁内存大小,以 Kbytes 为单位。
ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。

-m
最大内存大小,以 Kbytes 为单位。
ulimit – m unlimited;对最大内存不开展限定。

-n
可以打开最大文件讲述符的数量。
ulimit – n 128;限制最大可以选拔 128 个公文讲述符。

-p
管道缓冲区的轻重缓急,以 Kbytes 为单位。
ulimit – p 512;限制管道缓冲区的尺寸为 512 Kbytes。

-s
线程栈大小,以 Kbytes 为单位。
ulimit – s 512;限制线程栈的分寸为 512 Kbytes。

-t
最大的 CPU 占用时间,以秒为单位。
澳门金沙国际,ulimit – t unlimited;对最大的 CPU 占用时间不开展限制。

-u
用户最大可用的经过数。
ulimit – u 64;限制用户最多可以选用 64 个进度。

-v
进程最大可用的虚拟内存,以 Kbytes 为单位。
ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

 

俺们得以由此以下两种格局来选拔 ulimit:

在用户的起步脚本中
万一用户使用的是 bash,就可以在用户的家目录下的 .bashrc 文件中,加入ulimit – u 64,
来限制用户最多可以行使 64 个经过。此外,可以在与 .bashrc
作用十分的启动脚本中进入 ulimt。

 

 

在应用程序的开行脚本中
倘若用户要对某个应用程序 myapp 举办限定,可以写一个简易的剧本
startmyapp。

用户进度的可行限制

ulimit
作为对资源使用限制的一种办法,是有其效率范围的。那么,它界定的靶子是单个用户,单个
经过,如故整个种类啊?事实上,ulimit 限制的是现阶段 shell
进程以及其派生的子进程。举例来说,
倘使用户同时运转了多少个 shell 终端进度,只在里边一个条件中施行了 ulimit –
s 100,则该 shell
经过里成立文件的大大小小收到相应的范围,而与此同时另一个 shell
终端包涵其上运行的子程序都不会受其震慑:

Shell 进程 1

Shell 进程 2

 

 

ulimit 管理系统资源的例子

ulimit 提供了在 shell 进度中限制系统资源的法力。本章列举了部分施用
ulimit 对用户进
程进行限定的例证,详述了这个限制行为以及相应的影响,以此来表明 ulimit
如何对系统资源开展限定,从而达到调节系列质量的效率。

 

采纳 ulimit 限制程序所能成立的 socket 数量

设想一个有血有肉中的实际须要。对于一个 C/S 模型中的 server
程序来说,它会为八个 client
先后请求创造多个 socket 端口给与响应。假设恰巧有恢宏的 client 同时向
server 发出请
求,那么此时 server 就会须求创设大气的 socket
连接。但在一个系统当中,往往需求限制单
个 server 程序所能使用的最大 socket 数,以供其他的 server
程序所采取。那么大家怎么
来成功那点吗?答案是我们得以经过 ulimit
来兑现!细心的读者也许会发觉,通过前边章节的
介绍就好像没有限定 socket 使用的 ulimit 选项。是的,ulimit
并不曾哪个选项直接就是用来
限定 socket 的数据的。可是,大家有 -n
这几个选项,它是用于限制一个历程所能打开的文件描
述符的最大值。在 Linux
下所有资源皆文件,普通文书是文件,磁盘打印机是文件,socket 当
然也是文本。在 Linux 下创建一个新的 socket
连接,实际上就是创制一个新的文书讲述符。如
下图所示(查看某个进程近期开拓的文书讲述符音讯):

澳门金沙国际 6

由此,大家得以因而接纳 ulimit –
n
来限制程序所能打开的最大文件讲述符数量,从而
落得限制 socket 创造的数目。

 

 

每当一个新的线程被创建时都必要新分配一段大小为 1232KB (1MB)的内存空间

 

标题讲述:

生儿育女条件意识CPU满负荷运行,MongoDB的连接数始终突破不断1000。

缓解方案:

1、查看mongodb的日记,报上边的错误:
Wed Nov 21 15:26:09 [initandlisten] pthread_create failed: errno:11
Resource temporarily unavailable   
Wed Nov 21 15:26:09 [initandlisten] can’t create new thread, closing
connection

2、在一台同样的centos5的机械上测试,发现延续2000个一连一点题材都没有。  
3、上google查找难点,关键字“mongod.conf can’t create new thread, closing
connection”    
4、找到难点所在,原来centos6与事先centos5见仁见智,多了一个默许的界定用户nproc的配备文件
:/etc/security/limits.d/90-nproc.conf
,默许把普通用户的nproc设置成1024,而mongodb正好又是应用mongod这几个非root用户跑的,所以连接数一向上不去了。 
  
5、更改/etc/security/limits.d/90-nproc.conf ,把1024改成20480
,难题一蹴而就。 

代码:

[root@test ~]# cat /etc/security/limits.d/90-nproc.conf    # Default limit for number of user's processes to prevent    # accidental fork bombs.    # See rhbz #432903 for reasoning.*          soft    nproc     20480

#只顾,root用户不受nproc限制

 

 

打开文件句柄数和最大用户进程数限制:

在Linux上面计划应用的时候,有时候会遇上Socket/File: Can’t open so many
files的题材;这一个值也会潜移默化服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默许不是很高,一般都是1024,生产服务器用实际很简单就完结这些数目。上面说的是,怎么样通过正解配置来考订那几个系统默许值。

查看方法

俺们可以用ulimit -a来查看所有限制值

复制内容到剪贴板

代码:

[root@test ~]# ulimit -a    core file size          (blocks, -c) 0    data seg size           (kbytes, -d) unlimited    scheduling priority             (-e) 0    file size               (blocks, -f) unlimited    pending signals                 (-i) 256469    max locked memory       (kbytes, -l) 64    max memory size         (kbytes, -m) unlimited    open files                      (-n) 64000    pipe size            (512 bytes, -p) 8    POSIX message queues     (bytes, -q) 819200    real-time priority              (-r) 0    stack size              (kbytes, -s) 10240    cpu time               (seconds, -t) unlimited    max user processes              (-u) 65536    virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

里头 “open files
(-n)”是Linux操作系统对一个进度打开的文件句柄数量的范围,默许是1024。  
(也包罗打开的SOCKET数量,可影响数据库的面世连接数目)。

不错的做法,应该是修改/etc/security/limits.conf  
个中有很详细的注脚,比如    
hadoop  soft   nofile   32768    
hadoop hard nofile 65536

hadoop soft   nproc   32768  
hadoop hard nproc 65536

  
就足以将文件句柄限制统一改成软32768,硬65536。配置文件最前方的是指domain,设置为星号代表全局,此外你也得以针对不相同的用户做出分歧的界定。

瞩目:这几个当中的硬限制是实际上的界定,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软

默许显示的是软限制,如若运行ulimit命令修改的时候从不拉长的话,就是三个参数一起改变。

RHE6及未来 nproc的改动在/etc/security/limits.d/90-nproc.conf中

 

 

怎么修改连接数限制:

暂时改动(当前shell下改变用户可打开进度数):

复制内容到剪贴板

代码:

# ulimit -u xxx

永久修改,
保障的做法是还要修改/etc/security/limits.d/90-nproc.conf 和
/etc/security/limits.conf如下:

limits_conf = /etc/security/limits.conf: 
*   soft   nproc    s1    
*   hard   nproc    h1

nproc_conf = /etc/security/limits.d/90-nproc.conf:  
*   soft    nproc    s2    
*   hard    nproc    h2

s1,h1,s2,h2必须是切实可行有意义的数. 此时ulimit -u展现的值为=min(h1,h2)

故而普通就设置s1=s2=h1=h2,
例如在limits_conf和nproc_conf中而且进入:  
*   soft   nproc   65536    
*   hard   nproc   65536

 

 limits.conf的格式如下:
username|@groupname type resource limit

username|@groupname:设置需求被限制的用户名,组名前边加@和用户名分别。也得以用通配符*来做有所用户的界定。

type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard
声明系统中所能设定的最大值。soft 的限制无法比har 限制高。用 –
就标明同时安装了 soft 和 hard 的值。

resource:
core – 限制内核文件的轻重
date – 最大数量大小
fsize – 最大文件大小
memlock – 最大锁定内存地址空间
nofile – 打开文件的最大数额
rss – 最大持久设置大小
stack – 最大栈大小
cpu – 以秒钟为单位的最多 CPU 时间
noproc – 进度的最大数额
as – 地址空间范围
maxlogins – 此用户同意登录的最大数额

要使 limits.conf 文件配置生效,必需要保管 pam_limits.so
文件被参加到起步文件中。查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so

暂时地,适用于通过 ulimit 命令登录 shell 会话时期。
永远地,通过将一个应和的 ulimit 语句添加到由登录 shell
读取的公文之一(例如 ~/.profile),即一定于 shell
的用户资源文件;或者通过编制 /etc/security/limits.conf。
   
何谓core文件,当一个主次崩溃时,在进度当前工作目录的core文件中复制了该进度的贮存图像。core文件仅仅是一个内存映象(同时添加调试新闻),首借使用来调节的。 
core文件是个二进制文件,必要用相应的工具来分析程序崩溃时的内存印象。
 
系统默认core文件的高低为0,所以并未创制。可以用ulimit命令查看和修改core文件的轻重缓急。
$ulimit -c
0
$ ulimit -c 1000
$ ulimit -c
1000
-c
指定修改core文件的尺寸,1000点名了core文件大小。也足以对core文件的深浅不做限定,如:
# ulimit -c unlimited
#ulimit -c
unlimited
假诺想让修改永久生效,则须要修改配置文件,如
.bash_profile、/etc/profile或/etc/security/limits.conf。
 2.nofile – 开辟文件的最大数目
对于要求做过多套接字连接并使它们处于打开状态的应用程序而言,最好通过动用
ulimit –n,或者经过设置nofile
参数,为用户把文件讲述符的数量设置得比默许值高一些
 
 
用ulimit -n 2048 修改只对当前的shell有效,退出后失效:
如A程序已经运行,此时ulimit -n为1024;之后ulimit -n
2048,那时在运行B程序;退出当前shell用户,再一次展开shell,之后运行C程序;那时唯有B程序用的是2048,其余用的都是1024


 

lsof命令

 

在巅峰下输入lsof即可突显系统打开的文本,因为 lsof
要求拜访基本内存和各个文件,所以必须以 root
用户的身份运行它才可以足够地表述其作用

各列解释

每行突显一个开辟的公文,若不点名条件默许将体现所有进度打开的具备文件

lsof输出各列音信的含义如下:
COMMAND:进度的称呼
PID:进度标识符
USER:进度所有者
FD:文件描述符,应用程序通过文件讲述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名号
SIZE:文件的尺寸
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的适宜名称

 

 

选项

lsof  filename 突显打开指定文件的享有进度
lsof -a 表示四个参数都必须知足时才显得结果
lsof -c string   突显COMMAND列中隐含指定字符的进度具有打开的文本
lsof -u username  展现所属user进度打开的文件
lsof -g gid 突显所属gid的进度情状
lsof +d /DIR/ 突显目录下被进度打开的文件
lsof +D /DIR/
同上,可是会递归搜索,可是会招来目录下的有所目录,时间相对较长
lsof -d FD 突显指定文件讲述符的进程
lsof -n 不将IP转换为hostname,缺省是不丰裕-n参数
lsof -p  <pid>  查看指定进度打开的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
            46 –> IPv4 or IPv6
            protocol –> TCP or UDP
            hostname –> Internet host name
            hostaddr –> IPv4地址
            service –> /etc/services 中的 service name
(可以不只一个)
            port –> 端口号 (可以不只一个)

 

lsof |grep deleted
,彰显文件系统中早就被删除的文书不过因为被引述所以还不能删除
lsof -i:36000,展现应用36000端口的经过
lsof -u root,展现以root运行的次第
lsof -c php-fpm,显示php-fpm进度打开的文书
lsof php.ini,突显打开php.ini那些文件的进程。

 

lsof -i :873|grep -v "PID"|awk '{print "kil -9",$2}'|sh
grep -v "PID":去除行头

 

# lsof -i 4  查看IPv4类型的经过
COMMAND    PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4     2213 Debian-exim    4u  IPv4   4844       TCP *:smtp
(LISTEN)
dhclient3 2306        root    4u  IPv4   4555       UDP *:bootpc

# lsof -i 6  查看IPv6类型的历程
COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2213 Debian-exim    3u  IPv6   4820       TCP *:smtp (LISTEN)

# lsof -i @192.168.1.2  查看与某个具体的IP相关联的进度
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
amule   3620 root   16u  IPv4  11925       TCP
192.168.1.2:42556->77.247.178.244:4242 (ESTABLISHED)
amule   3620 root   28u  IPv4  11952       TCP
192.168.1.2:49915->118-166-47-24.dynamic.hinet.net:5140
(ESTABLISHED)

# lsof -i:873  依照进程号查阅进度对应的可执行程序
COMMAND PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
rsync   702 root    4u  IPv4 3792149      0t0  TCP *:rsync (LISTEN)

lsof -p 702  依照进度号查阅进度对应的可执行程序
# lsof -p 702
COMMAND PID USER   FD   TYPE  DEVICE SIZE/OFF   NODE NAME
rsync   702 root  cwd    DIR   252,1     4096 311297 /root
rsync   702 root  rtd    DIR   252,1     4096      2 /
rsync   702 root  txt    REG   252,1   410536 240090 /usr/bin/rsync
rsync   702 root  mem    REG   252,1    18712 147514
/lib64/libattr.so.1.1.0
rsync   702 root  mem    REG   252,1   154528 147463 /lib64/ld-2.12.so
rsync   702 root    0u   CHR    
1,3      0t0   3787 /dev/null  前四个文件讲述符  标准输入 标准输出
标准错误 第多少个初叶文件讲述符

rsync   702 root    1u   CHR    
1,3      0t0   3787 /dev/null

rsync   702 root    2u   CHR    
1,3      0t0   3787 /dev/null

rsync   702 root    4u  IPv4 3792149      0t0    TCP *:rsync (LISTEN)

# lsof /usr/bin/rsync
COMMAND PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsync   702 root txt    REG  252,1   410536 240090 /usr/bin/rsync

 

# lsof -u steven
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 19640 steven cwd DIR 252,1 4096 2 /
sshd 19640 steven rtd DIR 252,1 4096 2 /
sshd 19640 steven txt REG 252,1 567128 239837 /usr/sbin/sshd
sshd 19640 steven DEL REG 0,4 6892665 /dev/zero
sshd 19640 steven mem REG 252,1 18600 147602
/lib64/security/pam_limits.so

# lsof -c rsync
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 702 root cwd DIR 252,1 4096 311297 /root
rsync 702 root rtd DIR 252,1 4096 2 /
rsync 702 root txt REG 252,1 410536 240090 /usr/bin/rsync
rsync 702 root mem REG 252,1 18712 147514 /lib64/libattr.so.1.1.0
rsync 702 root mem REG 252,1 1921176 147470 /lib64/libc-2.12.so
rsync 702 root 0u CHR 1,3 0t0 3787 /dev/null
rsync 702 root 4u IPv4 3792149 0t0 TCP *:rsync (LISTEN)

 

 

lsof简介

lsof(list open
files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的方式存在,通过文件不仅能够访问常规数量,还能访问互联网连接和硬件。所以如传输控制协议
(TCP) 和用户数据报协议 (UDP)
套接字等,系统在后台都为该应用程序分配了一个文书描述符,无论这些文件的精神怎么着,该文件讲述符为应用程序与基础操作系统之间的并行提供了通用接口。为应用程序打开文件的讲述符列表提供了大气有关那些应用程序本身的新闻,由此通过lsof工具可以查阅这一个列表对系统监测以及排错将是很有支持的。
大多数与 lsof 相关的新闻都存储于以进程的 PID 命名的目录中,即 /proc/1234
中包含的是 PID 为 1234 的进程的新闻。

lsof使用
lsof输出音讯意义

在极端下输入lsof即可展现系统打开的公文,因为 lsof
要求拜访基本内存和各样文件,所以必须以 root
用户的地方运行它才可以尽量地发挥其成效。

COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE      
NODE      NAME
init       1         root  cwd      DIR       3,3       1024      
2         /
init       1         root  rtd      DIR       3,3       1024      
2         /
init       1         root  txt      REG       3,3       38432     
1763452  /sbin/init
init       1         root  mem      REG       3,3       106114    
1091620  /lib/libdl-2.6.so
init       1         root  mem      REG       3,3       7560696   
1091614  /lib/libc-2.6.so
init       1         root  mem      REG       3,3       79460     
1091669  /lib/libselinux.so.1
init       1         root  mem      REG       3,3       223280    
1091668  /lib/libsepol.so.1
init       1         root  mem      REG       3,3       564136    
1091607  /lib/ld-2.6.so
init       1         root  10u      FIFO      0,15                 
1309     /dev/initctl

每行突显一个开拓的文本,若不点名条件默许将显示所有进程打开的兼具文件。lsof输出各列音讯的意义如下:

COMMAND:进度的名号
PID:进度标识符
USER:进度所有者
FD:文件描述符,应用程序通过文件讲述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的轻重缓急
NODE:索引节点(文件在磁盘上的标识) 文件inode
NAME:打开文件的格外路径

FD 列表示文件讲述符
cwd
表示应用程序的当前工作目录,那是该应用程序启动的目录,除非它自己对这一个目录进行变更。

txt
表示的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中浮现的
/sbin/init 程序。

u
代表该其次数值表示应用程序的文书描述符,那是开拓该文件时再次来到的一个整数。如上的尾声一行文件/dev/initctl,
其文件讲述符为 10。
文件被打开并处于读取/写入情势,而不是只读或只写情势。同时还有大写的W表示该应用程序具有对任何文件的写锁。
该公文讲述符用于确保每一遍只可以打开一个应用程序实例。初阶打开种种应用程序时,都具备两个公文描述符,
从 0 到
2,分别表示专业输入、输出和错误流。所以超过半数应用程序所打开的文本的 FD
都是从 3 开始。

Type 列表示文件类型
文本和目录分别名为 REG 和 DIR
CHR 和 BLK,分别代表字符和块设备
UNIX、FIFO 和 IPv4,分别代表 UNIX 域套接字、先进先出 (FIFO)
队列和网络协议 (IP) 套接字

lsof常用参数
lsof
常见的用法是寻觅应用程序打开的文书的称谓和数码。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个难点。
譬如说,linux限制了经过可以开拓文件的多寡。经常那么些数值很大,所以不会暴发难点,并且在需求时,应用程序可以请求更大的值(直到某
个上限)。如若你思疑应用程序耗尽了文本描述符,那么可以运用 lsof
总括打开的文件数量,以进行表达。lsof语法格式是:

lsof [options] filename

常用的参数列表:
lsof  filename 突显打开指定文件的保有进度
lsof -a 表示七个参数都必须满意时才呈现结果
lsof -c string   突显COMMAND列中涵盖指定字符的历程具有打开的文件
lsof -u username  突显所属user进度打开的文本
lsof -g gid 彰显所属gid的历程意况
lsof +d /DIR/ 展现目录下被进程打开的文本
lsof +D /DIR/
同上,可是会递归搜索,可是会招来目录下的富有目录,时间相对较长
lsof -d FD 显示指定文件讲述符的历程
lsof -n 不将IP转换为hostname,缺省是不丰裕-n参数
lsof -p  <pid>  查看指定进程打开的文件
lsof -i[46] [protocol][@hostname|@hostaddr][:service|port]
            46 –> IPv4 or IPv6
            protocol –> TCP or UDP
            hostname –> Internet host name
            hostaddr –> IPv4地址
            service –> /etc/services 中的 service name
(可以不只一个)
            port –> 端口号 (可以不只一个)

            
            
lsof使用实例

一、查找哪个人在接纳文件系统

在卸载文件系统时,要是该文件系统中有此外打开的公文,操作日常将会破产。那么通过lsof可以找出这几个经过在行使当前要卸载的文件系统,如下:

# lsof  /GTES11/
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
bash    4208 root  cwd    DIR    3,1 4096    2 /GTES11/
vim     4230 root  cwd    DIR    3,1 4096    2 /GTES11/

二、复苏删除的文件
当Linux统计机受到侵袭时,常见的处境是日记文件被删除,以遮盖攻击者的踪影。管理漏洞百出也说不定造成意外删除主要的文本,比如在清理旧日志时,意外地删除了数据库的运动工作日志。
奇迹可以透过lsof来过来那些文件。
当进度打开了某个文件时,只要该进度保持开拓该公文,纵然将其删除,它依然存在于磁盘中。这表示,进程并不知道文件已经被剔除,它如故可以像打开该文件时提必要它的公文讲述符举行读取和写入。
除外该进度之外,这几个文件是不可知的,因为早已去除了其对应的目录索引节点inode。

在/proc
目录下,其中饱含了反映基本和进程树的各个文件。/proc目录挂载的是在内存中所映射的一块区域,所以这一个文件和目录并不存在于磁盘中,因而当大家对这个文件举行读取和写入时,实际上是在从内存中获取有关音信。大部分与
lsof 相关的音信都存储于以进度的 PID 命名的目录中,即 /proc/1234
中带有的是 PID 为 1234
的进度的音信。每个进度目录中留存着各个文件,它们得以使得应用程序简单地打听进度的内存空间、文件讲述符列表、指向磁盘上的文书的记号链接和其余系统新闻。lsof
程序采纳该音讯和其余关于基本内部处境的音讯来暴发其出口。所以lsof
可以显得进度的文本讲述符和相关的文本名等音讯。也就是大家由此访问进程的文件讲述符可以找到该文件的有关新闻。
ll /proc/8775/exe
lrwxrwxrwx 1 root root 0 Mar 29 19:02 /proc/8775/exe ->
/usr/sbin/sshd

当系统中的某个文件被意外地删除了,只要这一个时候系统中还有进度正在访问该文件,那么大家就可以透过lsof从/proc目录下复苏该公文的内容。
借使由于误操作将/var/log/messages文件删除掉了,那么此时要将/var/log/messages文件苏醒的点子如下:

首先使用lsof来查看当前是不是有经过打开/var/logmessages文件,如下:
# lsof |grep /var/log/messages
syslogd   1283      root    2w      REG        3,3  5381017    1773647
/var/log/messages (deleted)

从上边的音讯可以见见 PID 1283(syslogd)打开文件的公文讲述符为
2。同时还是可以见到/var/log/messages已经标记被删除了。因而大家得以在
/proc/1283/fd/2
(fd下的各类以数字命名的文本表示经过对应的公文讲述符)中查看相应的新闻,如下:

# head -n 10 /proc/1283/fd/2
Aug  4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug  4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg
started.
Aug  4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8
(root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul
18 11:18:32 EDT 2007
Aug  4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 0000000000000000 –
000000000009f000 (usable)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 000000000009f000 –
00000000000a0000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 0000000000100000 –
000000001f7d3800 (usable)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 000000001f7d3800 –
0000000020000000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 00000000e0000000 –
00000000f0007000 (reserved)
Aug  4 13:50:15 holmes86 kernel:  BIOS-e820: 00000000f0008000 –
00000000f000c000 (reserved)

借使可以通过文件讲述符查看相应的数额,那么就足以行使 I/O
重定向将其复制到文件中,如:
cat /proc/1283/fd/2 > /var/log/messages

对于广大应用程序,尤其是日记文件和数据库,那种恢复生机删除文件的章程极度实惠

 

查找误删文件具体步骤

诸如寻找/var/log/messages

1、使用lsof查看/var/log上面的文件所用的文件讲述符
lsof +D /var/log
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
auditd    1138   root    5w   REG  253,0   724625 1312257
/var/log/audit/audit.log
rsyslogd  1168   root    1w   REG 
253,0     1111 1312269 /var/log/messages

rsyslogd  1168   root    2w   REG  253,0    55962 1312253
/var/log/cron
rsyslogd  1168   root    4w   REG  253,0     1763 1312270
/var/log/secure
mcelog    1493   root    3w   REG  253,0        0 1312155
/var/log/mcelog
zabbix_ag 2054 zabbix    1w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log
zabbix_ag 2054 zabbix    2w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix    1w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log
zabbix_ag 2058 zabbix    2w   REG  253,0   263546 1312233
/var/log/zabbix/zabbix_agentd.log

2、找到使用/var/log/messages的长河的pid
,和/var/log/messages所使用的文书讲述符次数  那里次数为1
ll /proc/1168/fd
total 0
lrwx—— 1 root root 64 Mar 25 11:00 0 -> socket:[10156]
l-wx—— 1 root root 64 Mar 25 11:00 1
-> /var/log/messages

l-wx—— 1 root root 64 Mar 30 10:24 2 -> /var/log/cron
lr-x—— 1 root root 64 Mar 25 11:00 3 -> /proc/kmsg
l-wx—— 1 root root 64 Mar 30 10:24 4 -> /var/log/secure

3、cat一下文本讲述符为1的文件
cat /proc/1168/fd/1
Mar 28 10:37:01 steven rsyslogd: [origin software=”rsyslogd”
swVersion=”5.8.10″ x-pid=”1168″ x-info=”]
rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation
detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed:
sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None

4、进行相比,发现真正是均等的
at /var/log/messages
Mar 28 10:37:01 steven rsyslogd: [origin software=”rsyslogd”
swVersion=”5.8.10″ x-pid=”1168″ x-info=”]
rsyslogd was HUPed
Mar 28 11:49:21 steven fail2ban.filter[2075]: INFO Log rotation
detected for /var/log/secure
Mar 28 12:40:12 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 12:40:22 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 13:36:27 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 13:36:38 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 28 18:24:48 steven yum[4880]: Installed:
sysstat-9.0.4-27.el6.x86_64
Mar 28 19:13:41 steven kernel: e1000: eth0 NIC Link is Down
Mar 28 19:13:53 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 12:34:14 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 12:34:23 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None
Mar 29 19:01:57 steven kernel: e1000: eth0 NIC Link is Down
Mar 29 19:02:09 steven kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full
Duplex, Flow Control: None

5、备份下来
cat /proc/1168/fd/1> /var/log/messages


pidof命令

 

pidof  进程名

 

21852是libvirtd  进度的进度号

[root@gz]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign
Address             State       PID/Program name   
tcp        0      0 0.0.0.0:5905               
0.0.0.0:*                   LISTEN      21945/qemu-kvm      
tcp        0      0 0.0.0.0:16509              
0.0.0.0:*                   LISTEN      21852/libvirtd      
tcp        0      0 0.0.0.0:9022               
0.0.0.0:*                   LISTEN      1150/sshd           
tcp        0      0 127.0.0.1:8000             
0.0.0.0:*                   LISTEN      1173/python         
tcp        0      0 0.0.0.0:6080               
0.0.0.0:*                   LISTEN      1171/python         
tcp        0      0 0.0.0.0:5903               
0.0.0.0:*                   LISTEN      21977/qemu-kvm      
tcp        0      0 :::9022                    
:::*                        LISTEN      1150/sshd           

[root@gzy1]# pidof libvirtd
21852

 

f

相关文章