1.Monit - 用于管理和监控 Linux 系统的进进程监控开源工具
2.从Linux内核源码的角度深入解释进程(图例解析)
3.Linux安装使用pidstat命令以对进程数据进行监控
4.关于linux服务器进程监控及自动重启的方法介绍
5.Linux内核源码解析---cgroup实现之整体架构与初始化
6.Linux性能监控之CPU平均负载、使用率监控、程监进程监控
Monit - 用于管理和监控 Linux 系统的控源开源工具
Monit是一个免费的开源工具,能够自动监控和管理UNIX/Linux系统中的进进程监控进程、文件、程监目录、控源html禁止粘贴源码校验和、进进程监控权限、程监文件系统和服务。控源
它提供了用户友好的进进程监控Web界面,可以通过本机HTTP(S)Web服务器或命令行界面查看系统状态和设置进程。程监需要注意的控源是,为了访问和查看Monit Web界面,进进程监控您需要在系统上安装Apache或Nginx等Web服务器。程监
Monit的控源功能十分丰富,包括在进程未运行时启动进程,如果没有响应则重新启动进程,并在使用高资源时停止进程。此外,它还能监视文件、目录和文件系统的更改、校验和更改、文件大小更改或时间戳更改。Monit还能监控远程主机的TCP/IP端口、服务器协议和ping,并保留自己的日志文件,就任何严重错误情况和恢复状态发出警报。
本文将为您提供一个简单指南,介绍如何在基于RHEL和基于Debian的Linux发行版上安装和配置Monit。
首先,在Linux中安装Monit。默认情况下,Monit监控程序在默认的系统基础存储库中不可用,您需要添加并启用第三方epel存储库才能在CentOS、Rocky Linux和AlmaLinux等基于RHEL的发行版下安装Monit包。对于Ubuntu/Debian/Linux Mint用户,可以使用apt命令轻松安装。大象源码1688
其次,在Linux中配置Monit。Monit的配置文件易于阅读,每2分钟监控一次正在运行的服务,并将日志保存在“/var/log/monit”中。Monit有一个在端口上运行的Web界面。要启用Web界面,您需要在Monit配置文件中进行更改。
配置完成后,您需要启动、启用和验证Monit服务以重新加载新的配置设置。现在,您将能够通过导航到相应的URL来访问Monit Web界面,并输入用户名“admin”和密码“monit”。
最后,将Linux服务添加到监控中。一旦正确设置了Monit Web界面,开始将您要监控的程序添加到相应的配置文件中。以下是一些有用的Monit配置示例,它们对于了解服务如何运行、将其配置文件保存在何处、如何启动和停止服务等非常有帮助。
从Linux内核源码的角度深入解释进程(图例解析)
进程,作为操作系统的基本概念,是程序执行过程的体现,自计算机诞生以来,其工作原理沿用冯诺依曼架构。从代码编译生成的可执行文件在特定环境中加载到内存,便构成了一个执行中的进程。进程的生命周期涉及启动、状态转换、执行和退出等阶段。在Linux中,进程的创建始于fork调用,通过复制当前进程生成新进程,接着通过exec初始化新进程地址空间,盗版app源码进入就绪状态等待调度。
进程在操作系统中被抽象为task_struct,这个庞大的结构体,即进程描述符,记录了进程的全部属性和操作,包括进程ID(pid)和状态。查看进程ID和父进程ID可以通过特定命令。状态字段通过long类型表示,其他细节可以通过源码深入探究。
创建进程涉及fork和copy_process函数,fork仅复制轻量级信息,使用写时复制技术避免数据冲突。fork后的子进程在必要时通过exec开始独立执行。在Linux中,线程和进程本质上是相同的,区别在于资源的共享程度。
进程调度采用抢占式策略,如CFS(完全公平调度)通过虚拟运行时来实现公平调度,通过时间记账和红黑树组织队列来高效选择进程。进程退出时,会清理资源并可能转化为孤儿进程,由特定进程接管。理解这些原理有助于深入理解Linux内核对进程的管理机制。
Linux安装使用pidstat命令以对进程数据进行监控
如何安装pidstat
pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。
在Debian/Ubuntu系统中可以使用下面的命令来安装
# apt-get install sysstat
CentOS/Fedora/RHEL版本的linux中则使用下面的命令:
# yum install sysstat
使用pidstat
使用pidstat不加任何参数等价于加上-p参数,但是只有正在活动的任务会被显示出来。
# pidstat
在结果中你能看到如下内容:
PID - 被监控的任务的进程号
%usr - 当在用户层执行(应用程序)时这个任务的cpu使用率,和 nice 优先级无关。注意这个字段计算的cpu时间不包括在虚拟处理器中花去的时间。
%system - 这个任务在系统层使用时的cpu使用率。
%guest - 任务花费在虚拟机上的cpu使用率(运行在虚拟处理器)。
%CPU - 任务总的cpu使用率。在SMP环境(多处理器)中,如果在命令行中输入-I参数的换肤lol源码话,cpu使用率会除以你的cpu数量。
CPU - 正在运行这个任务的处理器编号。
Command - 这个任务的命令名称。
I/O 统计数据
通过使用-d参数来得到I/O的统计数据。比如:
# pidstat -d -p
IO 输出会显示一些内的条目:
kB_rd/s - 任务从硬盘上的读取速度(kb)
kB_wr/s - 任务向硬盘中的写入速度(kb)
kB_ccwr/s - 任务写入磁盘被取消的速率(kb)
页面失败和内存使用
使用-r标记你能够得到内存使用情况的数据。
重要的条目:
minflt/s - 从内存中加载数据时每秒出现的小的错误的数目,这些不要求从磁盘载入内存页面。
majflt/s - 从内存中加载数据时每秒出现的较大错误的数目,这些要求从磁盘载入内存页面。
VSZ - 虚拟容量:整个进程的虚拟内存使用(kb)
RSS - 长期内存使用:任务的不可交换物理内存的使用量(kb)
举例
1. 你可以通过使用下面的命令来监测内存使用
# pidstat -r 2 5
这会给你5份关于page faults的统计数据结果,间隔2秒。这将会更容易的定位出现问题的进程。
2. 显示所有mysql服务器的子进程
# pidstat -T CHILD -C mysql
3. 将所有的统计数据结合到一个便于阅读的单一报告中:
# pidstat -urd -h
上面就是Linux安装使用pidstat的方法介绍了,通过本文的介绍,相信你对系统监控命令pidstat的用法有了一定的了解
关于linux服务器进程监控及自动重启的方法介绍
本周开始,新手游进行删档封测阶段,前两天表现还好,今天更新后出现几次宕机行为,比较影响玩家的测试和体验,我们的服务器管理系统尚未完善,为了晚上能够预防宕机造成损失,先用一种简单的方案临时顶替一下。实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则处理我们预设的脚本。
首先我们要向crontab加入一个新任务。
# crontab -e:进入编辑状态,其实就是使用vi编辑。
*/1 * * * * sh /root/monitor.sh
我这里只是简单的设置每分钟调用一个shell脚本monitor.sh。这里可以配置的更强大,大家可以去搜索一下crontab的教程,网上有很多这类的教程。
这里需要注意的是,很多教程配置command的时候直接使用/root/monitor.sh,我设置的时候发现这样配置不会执行shell脚本,前面加上sh后就能执行了。rocketmapp源码分析
然后我们开始写monitor.sh这个shell脚本。
#! /bin/sh proc_name="WorldFrame_d"
#进程名 proc_num()
#查询进程数
{
num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
return $num}proc_num number=$?
#获取进程数量
if [ $number -eq 0 ]
#如果进程数量为0then
#重新启动服务器,或者扩展其它内容。
cd /longwen/server/sbin/linux; ./WorldFrame_d -c 1fi
我这个脚本,只是简单的检测了进程是否存在,不存在就自动重启服务器。
这里其实也可以扩展一下,比如对日志文件的处理以及重启时间等的记录等等。
需要注意的是在windows编辑sh文件要注意格式问题(CR/LR),否则容易出现sh执行错误的BUG。
好了,进行测试吧,我这里测试OK,记录一下,希望能帮到其它遇到类似问题的同学。谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。
Linux内核源码解析---cgroup实现之整体架构与初始化
cgroup在年由Google工程师开发,于年被融入Linux 2.6.内核。它旨在管理不同进程组,监控一组进程的行为和资源分配,是Docker和Kubernetes的基石,同时也被高版本内核中的LXC技术所使用。本文基于最早融入内核中的代码进行深入分析。
理解cgroup的核心,首先需要掌握其内部的常用术语,如子系统、层级、cgroupfs_root、cgroup、css_set、cgroup_subsys_state、cg_cgroup_link等。子系统负责控制不同进程的行为,例如CPU子系统可以控制一组进程在CPU上执行的时间占比。层级在内核中表示为cgroupfs_root,一个层级控制一批进程,层级内部绑定一个或多个子系统,每个进程只能在一个层级中存在,但一个进程可以被多个层级管理。cgroup以树形结构组织,每一棵树对应一个层级,层级内部可以关联一个或多个子系统。
每个层级内部包含的节点代表一个cgroup,进程结构体内部包含一个css_set,用于找到控制该进程的所有cgroup,多个进程可以共用一个css_set。cgroup_subsys_state用于保存一系列子系统,数组中的每一个元素都是cgroup_subsys_state。cg_cgroup_link收集不同层级的cgroup和css_set,通过该结构可以找到与之关联的进程。
了解了这些概念后,可以进一步探索cgroup内部用于结构转换的函数,如task_subsys_state、find_existing_css_set等,这些函数帮助理解cgroup的内部运作。此外,cgroup_init_early和cgroup_init函数是初始化cgroup的关键步骤,它们负责初始化rootnode和子系统的数组,为cgroup的使用做准备。
最后,需要明确Linux内一切皆文件,cgroup基于VFS实现。内核启动时进行初始化,以确保系统能够正确管理进程资源。cgroup的初始化过程分为早期初始化和常规初始化,其中早期初始化用于准备cpuset和CPU子系统,确保它们在系统运行时能够正常工作。通过这些步骤,我们可以深入理解cgroup如何在Linux内核中实现资源管理和进程控制。
Linux性能监控之CPU平均负载、使用率监控、进程监控
Linux系统性能监控是管理员日常维护的重要一环,其中CPU平均负载、使用率以及进程监控是关键部分。平均负载,即活跃进程数,反映系统繁忙程度,与CPU使用率并非直接相关,它涵盖了等待CPU和I/O的进程。通过命令`uptime`可以快速获取系统运行状态,如负载情况,这对于应急响应和问题定位很有帮助。
检测CPU使用率,可以借助`stress`和`sysstat`包,其中`mpstat`用于实时监控每个CPU核心的负载、I/O等待等信息,而`pidstat`则针对进程资源占用进行详细监控。例如,通过`top`命令查看进程CPU和内存占用,还可以通过`mpstat -P ALL 5 2`每5秒生成两次报告,以追踪系统实时状态。
若需进行压力测试以排查性能问题,`stress`工具提供了一种模拟场景的方式。总的来说,对这些指标的了解和监控,有助于优化系统性能和资源分配,确保系统的稳定运行。
linuxä¸å¦ä½çå¬è¿ç¨
ä¸ãsupervise
Superviseæ¯daemontoolsçä¸ä¸ªå·¥å ·ï¼å¯ä»¥ç¨æ¥çæ§ç®¡çunixä¸çåºç¨ç¨åºè¿è¡æ åµï¼å¨åºç¨ç¨åºåºç°å¼å¸¸æ¶ï¼superviseå¯ä»¥éæ°å¯å¨æå®ç¨åºã
使ç¨ï¼
mkdir test
cd test
vim run åå ¥å¸ææ§è¡çæä½
supervise test (注æè¿éæ¯çåæ°æ¯runæ件ä¸å±çæ件夹ï¼æ¹årunç为å¯æ§è¡ chmod +x run)
äºãmonit
monitæ¯ä¸ä¸ªå°åçå¼æ¾æºç å·¥å ·æ¥ç®¡çåçæ§Unixç³»ç»ãMonitå¯ä»¥èªå¨ç»´æ¤è¿ç¨ï¼åæ¶é¿å è¿ç¨å¼å¸¸éåºç产ççé®é¢ã
ç³»ç»ï¼ monitå¯ä»¥çæ§é®é¢çåçï¼å æ¬è¿ç¨ç¶æãç³»ç»cpuè´è½½ãå åå ç¨æ åµçï¼ä¾å¦å½apacheæå¡çcpuè´è½½ä»¥åå åé¸å¼æ åµè¿é«æ¶åï¼å®ä¼éå¯apacheæå¡ã
è¿ç¨ï¼ monitå¯ä»¥çæ§å®æ¤è¿ç¨ï¼å æ¬ç³»ç»è¿ç¨ãä¾å¦å½æ个è¿è¡downæï¼å®ä¼èªå¨æ¢å¤éå¯è¯¥è¿ç¨ã
æ件系ç»ï¼Monitå¯ä»¥çæ§æ¬å°æ件ãç®å½ãæ件系ç»çååï¼å æ¬æ¶é´æ³ãæ ¡éªå¼ã大å°çååãä¾å¦ï¼å¯ä»¥çæ§æ件sha1以åmd5çå¼ï¼æ¥çæ§æ件æ¯å¦åçååã
ç½ç»ï¼monitå¯ä»¥çæ§ç½ç»è¿æ¥ï¼æ¯æTCPãUDPãUnix domain sockets以åHTTPãSMTPçã
å®æ¶èæ¬ï¼monitå¯ä»¥ç¨æ¥å®æ¶æµè¯ç¨åºåèæ¬ï¼è·åç¨åºè¾åºç»æï¼è¿èå¤ææ¯å¦æåæå ¶ä»æ åµã
å®è£ ï¼
sudo apt-get install monit
ç¼è¾é ç½®ï¼
sudo vim /etc/monit/monitrc
å¯å¨ãåæ¢ãéå¯ï¼
sudo /etc/init.d/monit start
sudo /etc/init.d/monit stop
sudo /etc/init.d/monit restart
设置页é¢çæ§ç¶æï¼
set mand=python /root/test_supervisor.py
process_name=%(program_name)s
stdout_logfile=/root/test.log
stderr_logfile=/root/test.log
ä¿åï¼å¯å¨ï¼
/usr/bin/supervisord -c /etc/supervisord.conf
Linux中进程管理工具htop的安装与其命令使用教程
1. htop简介Htop是一款运行于Linux系统监控与进程管理软件,用于取代Unix下传统的top。与top只提供最消耗资源的进程列表不同,htop提供所有进程的列表,并且使用彩色标识出处理器、swap和内存状态。
用户一般可以在top无法提供详尽系统信息的情况下选择安装并使用htop。比如,在查找应用程序的内存泄漏问题时。与top相比,htop提供更方便、光标控制的界面来杀死进程。
htop用C语言编写,采用了ncurses库。htop的名称源于其作者的名字。
2. htop安装
代码如下:
yum -y install ncurses-devel #htop依赖ncurseswget /project/htop/htop/1.0.2/htop-1.0.2.tar.gz
tar xzf htop-1.0.2.tar.gz
cd htop-1.0.2
./configure
make make install
3. htop用法
安装完成后,命令行中直接敲击htop命令,即可进入htop的界面
各项从上至下分别说明如下:
左边部分从上至下,分别为,cpu、内存、交换分区的使用情况,右边部分为:Tasks为进程总数,当前运行的进程数、Load average为系统1分钟,5分钟,分钟的平均负载情况、Uptime为系统运行的时间。
PID:进行的标识号
USER:运行此进程的用户
PRI:进程的优先级
NI:进程的优先级别值,默认的为0,可以进行调整
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程占用的共享内存值
S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称
下面是 F1~F 的功能和对应的字母快捷键。
Shortcut KeyFunction KeyDescription中文说明h, ? F1 Invoke htop Help 查看htop使用说明 S F2 Htop Setup Menu htop 设定 / F3 Search for a Process 搜索进程 \ F4 Incremental process filtering 增量进程过滤器 t F5 Tree View 显示树形结构 , F6 Sort by a column 选择排序方式 [ F7 Nice - (change priority) 可减少nice值,这样就可以提高对应进程的优先级 ] F8 Nice + (change priority) 可增加nice值,这样就可以降低对应进程的优先级 k F9 Kill a Process 可对进程传递信号 q F Quit htop 结束htop命令行选项(COMMAND-LINE OPTIONS)
-C --no-color 使用一个单色的配色方案 -d --delay=DELAY 设置延迟更新时间,单位秒 -h --help 显示htop 命令帮助信息 -u --user=USERNAME 只显示一个给定的用户的过程 -p --pid=PID,PID 只显示给定的PIDs -s --sort-key COLUMN 依此列来排序 -v version 显示版本信息交互式命令(INTERACTIVE COMMANDS)
上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程 Space 标记/取消标记一个进程。命令可以作用于多个进程,例如 kill,将应用于所有已标记的进程 U 取消标记所有进程 s 选择某一进程,按s:用strace追踪进程的系统调用 l 显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件 I 倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然 +, - 在树形模式下,展开或折叠子树 a (在有多处理器的机器上) 设置 CPU affinity: 标记一个进程允许使用哪些CPU u 显示特定用户进程 M 按Memory使用排序 P 按CPU使用排序 T 按Time+使用排序 F 跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能 K 显示/隐藏内核线程 H 显示/隐藏用户线程 Ctrl-L 刷新 Numbers PID 查找: 输入PID,光标将移动到相应的进程上4. 替代top
用htop替换top,可添加别名,编辑/root/.bashrc文件,添加如下代码
代码如下:
alias top=htoplinux守护进程管理神器-supervisor
supervisor是一款由Python开发的进程管理工具,其核心功能在于通过服务端supervisord管理子进程,提供启动、关闭、重启和查看进程状态的能力。
这款工具的独特之处在于能够通过Web界面直观地监控并控制进程状态,用户可以在Web页面上轻松地启动或停止服务。为了更直观地理解supervisor的作用,下图展示了如何通过它对服务器上的一些agent进行管理,以及对一些web服务进程进行监控,同时查看了简单的启动日志。
安装方面,由于supervisor是用Python编写的,因此使用pip工具安装最为便捷。对于CentOS系统,用户也可以选择通过yum来安装,但推荐使用pip以获取最新的版本和最佳兼容性。
对于希望确保服务在服务器异常宕机后能够快速恢复的用户,开启开机启动功能尤为重要。虽然通过pip或yum安装能够实现基础的安装流程,但为了实现开机启动,还需要进行额外的配置步骤。
配置过程包括服务端配置和子进程配置文件的创建与调整。服务端配置文件通常包含了一些默认设置,例如,web服务默认状态为关闭。用户可以根据实际需求,如内网服务的使用场景,决定是否开启web服务。子进程配置文件则在目录/etc/supervisord.d/*.ini中存放,这部分配置文件尤为关键,直接决定了子进程的行为和属性。
以node_exporter为例,其配置文件可以展示如何添加环境变量以及调整特定参数。用户还可以根据需要访问supervisord.org网站,查阅更多详细配置选项和最佳实践。
在实际使用中,掌握命令操作是高效管理进程的关键。用户可以通过执行`--help`命令了解特定命令的帮助文档,从而快速获取所需信息。对于日常操作而言,`supervisorctl`命令是执行进程控制操作的常用工具。
为了简化管理流程,用户可以将`supervisorctl`命令直接输入终端,进入交互式控制界面,从而直接执行各种管理命令,如启动、停止、重启进程,或查看进程状态等。