文档章节

Troubleshooting(二):进程

诸葛孔明亮
 诸葛孔明亮
发布于 2016/10/24 17:37
字数 2350
阅读 8
收藏 0

前言

    服务器的意义就在于这些运行中的进程,这也是工作围绕的重点之一。

    在 Linux 和 Unix 中(Windows Server 基本没接触过)进程通常被定义为程序执行时的一个实例,每个进程都有一个自身的进程描述符,里面详细记录了关于进程的一切。

     Liunx 中查看进程状态的命令也大都围绕着这个进程描述符的,和 TCP 协议一样,每个域都有自身的含义,前辈们的设计理念还是很统一而高效的!   

    PS:关于进程描述符和比较偏底层的就不在这里详细介绍了,本人理解有限,传送门:《深入理解 Linux 内核》

 

进程状态

  •     ps

    ps:Process Status,从字面意思就可以看出来,这个命令是用来查看进程状态的。

    ps 命令列出了当前进程的快照,也就是说它不是动态的显示这些进程的,仅仅是执行命令那个时刻的进程信息,而在 Linux 中,/proc 目录就是存放进程相关的文件及目录,ps 命令也是通过读取这些文件来显示的(starce 命令可以追踪命令的系统调用 starce ps)。

    进程状态STAT

    D        不可中断(通常为 IO)

    R        正在运行中的进程

    S        已经中断的进程,处于休眠状态,系统中大部分进程都是这个状态

    T        停止或被暂停的进程

    W        没有做够的内存页分配

    X        已经死掉的进程

    Z        僵尸进程,进程已终止,但进程描述符还在,直到父进程调用 wait4() 系统调用后释放

 

    BSD 风格

    <        高优先级进程

    N        低优先级进程

    L        在内存中被锁了内存分页

    s        包含子进程

    l        多线程进程

    +        前台运行的进程

 

    VSZ:占用虚拟内存大小;(Mac 中压缩后的内存跟这个很像)

    RSS:占用内存大小;

    TTY:终端的次要装置号码;

 

    常用选项:    a  显示现行终端机下所有程序,不区分用户;

                       -A -e x  显示所有程序;

                       -H 树装显示(实在很鸡肋,仅用空格肉眼实在不好分辨)

 

  • pstree

    以树状结构显示进程,ps -H 的增强版。

 

  • pstack

    类似于 stack 命令,用于进程的栈跟踪,显示系统调用,偏底层,对于内功修炼很有帮助。

 

  • kill

    终止指定进程,kill 命令通过向进程发送指定的信号来结束相应进程的,默认采用 15 SIGTERM 的信号,-l 参数可以列出全部信号编号参数(含义可自行查找),常用的 HUP 1 终端断线、INT 2 中断、QUIT 3 退出、TERM 15 终止、KILL 9 强制终止、CONT 18 继续(与  STOP 相反)、STOP 19 暂停(同 Ctrl + z)

 

  • top/htop

    又一个 Linux 常用的进程管理工具,在性能分析时能实时显示各个进程的资源占用状况,类似于任务管理器。

    第一行:任务队列信息,同 uptime,load average 分别列出1、5、15分钟的负载数,大于 5 表示超负荷了。

    第二行:Tasks,处于某个状态的进程数;

    第三行:cpu 状态信息,us -- 用户空间cpu占用、sy —— 内核空间占用、ni——改变过优先级的进程占用、id——空闲cpu、wa——IO等待cpu占用、hi si 硬软中断占用;

    第四、五行:内存状态、swap 交换分区状态;

PS:简单计算可用内存数:第四行 free + 第四行 buff + 第五行 cache

    top 还支持交互命令的方式,h 可显示帮助信息,q 为退出,r 可调整进程的优先级。

    htop 类似于 top,默认是没有安装的,展示效果更好,因为命令大都是 F1~F10,mac 上按键不方便,用的较少。

 

  • nice/renice

    nice [OPTION] [command [arguments...]]

    调整进程运行的优先级,提高进程的优先级,内核会分配更多 CPU 时间片给这个进程,默认情况下进程是以 0 的优先级启动的,top 中 NI(nice value)列展示了进程的优先级情况,范围为 -20 ~ 19,值越低,优先级越高。

    renice 类似于 nice,-u -g 选项可指定用户和组来改变进程优先级。

 

  • ulimit

    ulimit shell 内建命令,调用系统 getrlimit 和 setrlimit API,来改变 resouce limit,从而改变 shell 启动的进程的 resource limit(子进程继承)。

    在 Linux 中,Resouce limit 指的是在一个进程执行的时候,所获得的资源限制:

    内核结构体定义了 rlimit 数据结构:

    ulimit 的 -S -H 参数分别对应内核的 soft limit 和 hard limit,hard limit 作为 soft limit 的上限,当设置了 hard limit 后,soft limit 就不能超过它,不指定这两个参数的时候,默认同时设置soft 和 hard。

    -a 参数可显示当前的限制设定,-c core 文件的最大值、-f shell 能建立的最大文件、-m 可使用的内存上限、-n 同时开启的文件、-t 指定 CPU 使用时间、-u 用户最多开启的程序数目。

    ulimit 限制程序所能创建的 socket 数量,对于 C/S 模型中的 server 来说,它会为多个 client 请求创建多个 socket 端口响应,linux创建一个新的socket,实际上也是创建了一个新的文件描述符,通过 ulimit -n来限制程序所能打开的最大文件描述符,可限制socket创建的数量。

    ulimit 限制的当前 shell 进程以及其派生的子进程,要想针对具体用户的资源加以限制,则需通过修改 /etc/security/limit.conf 配置文件来限定:

<domain>  <type>  <item>  <value>

    domain表示用户或组,type 为soft 和 hard,item表示需要限定的资源(cpu、stack、nofile等)

    如果想对整个系统做限制,则需要修改 /proc 的配置文件,/proc/sys/kernel/pid_max、/proc/sys/net/ipv4/ip_local_port_range 等等,通过修改内核的配置文件,来控制系统的资源限制。

 

  • cgroups

    cgroups(Control Groups)最初叫Process Container,由Google工程师(Paul Menage和Rohit Seth)于2006年提出,后来因为Container有多重含义容易引起误解,就在2007年更名为Control Groups,并被整合进Linux内核。顾名思义就是把进程放到一个组里面统一加以控制。ps:偷懒摘下维基百科

    最近很火的 docker 就是使用 cgroups 来管理 container 的资源的,linux 下重量级的资源管理框架,配上好的前端简直可以把配置系统资源这么抽象而微观的事情,变成一件可视化精细度很高的一件事,由于小的项目很少关注资源限制,所以大都用不上,不过不能否定它的强大。

    后续单独博客整理

 

  • pgrep

    通过进程号全局正则匹配,pgrep 扫描当前运行的进程,然后按照命令匹配出进程 PID,-u 可指定用户、-l 显示进程名称、-P 指定父进程号、-t 指定开启进程的终端。

 

  • fg/bg

    fg 和 bg 用来调度正在运行的任务,前台运行的程序使用 Ctrl-z 可以挂起这个程序,jobs 命令可以查看任务,fg 命令可以把作业调回前台运行,bg 则可以把程序调度到后台,& 用在命令最后,也可以把这个命令放到后台执行。

  • nohup

    不挂断地运行命令,nohup 运行由 command 参数和任何相关的 Arg 参数指定的命令,它会忽略所有挂断(SIGHUP)信号,从而使的程序接受不到挂断的信号。

    输出会附加到当前目录的 nohup.out 文件中,nohup command & 即可创建一个不挂起的进程到后台,命令提示 nohup 成功后在终端任意键即可回到命令窗口,exit 退出则可安全退出,直接在成功后就关闭终端,会断掉 session,导致 nohup 的进程被一起 shutdown。

 

  • ipcs

    ipcs 显示进程间通信设施状态,可以显示消息队列、共享内存和信号量,-m 查看系统使用的 IPC 共享内存资源、-q 系统使用 IPC 消息队列、-s 系统使用 IPC 信号量资源、-l 查询系统 IPC 参数限制。

    IPC(Inter-process Communication)进程间通信,指多个进程间相互通信,交换信息的方法,Linux IPC 基本是从 Unix(System V风格和 BSD 风格)平台继承的,支持 POSIX (Portable Operating System Interface 可移植操作系统接口)IPC。

    信号是 Linux 系统在一定条件下生产的事件,是一种异步通信机制,进程不需要执行任何操作来等待信号的到达,信号异步通知接收信号的进程发生了某个事件,然后操作系统会中断接收到信号的进程的执行,转而去执行相应的信号处理程序。管道是用来连接不同进程之间的数据流。

    修改系统的 IPC 参数,需要修改 /etc/sysctl.conf 文件,kernel.msgmax、kernel.msgmnb、kernel.msgmni、kernel.shmmax 等参数,sysctl -p 生效。

ps:未搞懂 ipcs,解释均摘自 google 查询,先记录,后续有时间研究下

 

    

    

 

    

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

    

    

    

© 著作权归作者所有

共有 人打赏支持
诸葛孔明亮
粉丝 2
博文 64
码字总数 53931
作品 0
浦东
运维
【apache-hive-1.2.1】 hwi

一、下载hive-src.tar [hadoop@hftest0001 ~]$ pwd/home/hadoop [hadoop@hftest0001 ~]$ wget [hadoop@hftest0001 ~]$ tar -zxvf apache-hive-1.2.1-src.tar.gz [hadoop@hftest0001 hwi]$ cd......

HarryWu
2016/01/25
509
0
与IO相关的等待事件troubleshooting-系列9

Buffer Cache与IO相关的等待事件: 这种等待事件的产生原因是包含DBWR进程和IO Slaves的Buffer Cache操作。 'db file parallel write' , 'db file single write', 'write complete waits', '...

bisal
2013/10/12
0
0
linux 系统监控、诊断工具之 IO wait

1、问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端、本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高...

大数据之路
2014/12/14
0
17
关于Redis延迟,不同系统下fork操作时间对比

在Redis latency problems troubleshooting页面中,作者对Redis延迟问题的成因进行了全方位的剖析,其中一项便是fork操作占用时间导致的延迟。最近Redis作者又对fork操作在各虚拟系统中的性能...

哈哈呵呵R
2014/04/04
0
0
linux centos7单用户重置root密码方法

一、grub未加密,能够接触服务器物理设备时: 1、重启物理机实机。 2、启动界面按“E” 3、“linux16”行 ro处改为“rw init=/sysroot/bin/sh ” 4、ctrl+X保存重启 5、chroot /sysroot/ 6、...

wb57a3e3bbb9d43
2017/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin系统使用deepin-wine安装exe程序

deepin自带原生deepin-wine使用命令如下: deepin-wine QQMusicSetup.exe deepin-wine的程序位置: /root/.wine 默认安装的QQ浏览器快捷方式位置: /root/.wine/drive_c/'Program Files'/Te...

临江仙卜算子
38分钟前
1
0
快速get到学习Linux操作系统的点

快速get到学习Linux操作系统的点 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件...

linuxCool
45分钟前
2
0
聊聊:Linux分区的那些方案

安装linux的整体步骤其实比较简单,唯一可能值得说明的地方,大概就是linux的分区了。 下面来给大家推荐一些分区方案。 1 分两个区 实际上,很多时候我们只需要分两个区:`/`和交换分区,日常...

Linux就该这么学
55分钟前
1
0
适配器模式和外观模式

适配器模式: 将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。 例子: //将Enumeration转换成Iteratorpublic class EnumerationIterator implements Iter...

王怀楼
57分钟前
2
0
7-CXF与Spring整合发布webservice

Spring+CXF整合来管理webservice 实现步骤: 1. 添加cxf.jar 包(集成了Spring.jar、servlet.jar ),spring.jar包 ,servlet.jar 包 2. 编写业务类,通过CXF来发布webservice 员工管理: 方法...

江戸川
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部