mysql监控内存cpu使用率_zabbix自动发现与监控内存和CPU使用率最高的进程

本文介绍了如何使用Zabbix监控Linux服务器中资源使用率最高的进程。通过编写shell脚本获取服务器的CPU和内存资源使用率最大的10个进程,以JSON格式输出,并利用Zabbix自动发现功能进行监控。监控包括进程的CPU和内存使用情况,以帮助分析服务器性能瓶颈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监控需求

某项目的应用服务器CPU和内存使用率的监控,通过zabbix系统监控记录应用服务器上进程的CPU和内存的使用情况,并以图表的形式实时展现,以便于我们分析服务器的性能瓶颈。

监控方式

利用zabbix监控系统的自动发现功能,首先编写shell脚本获取服务器的CPU和内存资源使用率最大的进程,以json的格式输出,然后对这些进程的CPU和内存资源使用情况进行监控。(本文监控的进程为Linux服务器中资源使用率最高的10个进程。)

缺点

不适用于监控固定的进程

首先使用top命令查看进程状态,再取出进程的%CPU(该值表示单个CPU的进程从上次更新到现在的CPU时间占用百分比) 和%MEM值。hmracdb2:~ # top

top - 13:57:01 up 32 days,  5:21,  2 users,  load average: 0.14, 0.26, 0.34

Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie

Cpu(s):  3.7%us,  2.7%sy,  0.0%ni, 87.2%id,  6.3%wa,  0.0%hi,  0.1%si,  0.0%st

Mem:   3926096k total,  3651612k used,   274484k free,   788120k buffers

Swap:  4193276k total,  1369968k used,  2823308k free,  1443884k cached

PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND

2365 root      20   0  854m 315m  12m S      3  8.2   1252:49 ohasd.bin

5307 oracle    20   0 1783m  22m  22m S      3  0.6   1106:03 oracle

4532 root      20   0  676m  31m  13m S      2  0.8 853:35.32 crsd.bin

4272 grid      RT   0  437m 282m  52m S      2  7.4   1006:47 ocssd.bin

5279 oracle    20   0 1771m  60m  48m S      2  1.6 477:11.19 oracle

5122 oracle    20   0  654m  15m  12m S      1  0.4 537:40.85 oraagent.bin

由于top是交互的命令,我们把top命令的结果输出到一个文件上

hmracdb2:~ # top -b -n 1 > /tmp/.top.txt

第一个脚本,获取监控进程内存资源占有率前10的进程,输出格式为json格式,用于zabbix自动发现进程# cat discovery_process.sh

#!/bin/bash

#system process discovery script

top -b -n 1 > /tmp/.top.txt && chown zabbix. /tmp/.top.txt

proc_array=(`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`)

length=${#proc_array[@]}

printf "{\n"

printf '\t'"\"data\":["

for ((i=0;i

do

printf "\n\t\t{"

printf "\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"

if [ $i -lt $[$length-1] ];then

printf ","

fi

done

printf "\n\t]\n"

printf "}\n"

或者# cat discovery_process2.sh

#!/bin/bash

#system process discovery script

top -b -n 1 > /tmp/.top.txt && chown zabbix. /tmp/.top.txt

proc_array=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`

length=`echo "${proc_array}" | wc -l`

count=0

echo '{'

echo -e '\t"data":['

echo "$proc_array" | while read line

do

echo -en '\t\t{"{#PROCESS_NAME}":"'$line'"}'

count=$(( $count + 1 ))

if [ $count -lt $length ];then

echo ','

fi

done

echo -e '\n\t]'

echo '}'

输出的效果如下[root@Zabbix_19F ~]# ./discovery_process.sh

{

"data":[

{"{#PROCESS_NAME}":"mysqld"},

{"{#PROCESS_NAME}":"php-fpm"},

{"{#PROCESS_NAME}":"zabbix_server"},

{"{#PROCESS_NAME}":"nginx"},

{"{#PROCESS_NAME}":"sshd"},

{"{#PROCESS_NAME}":"bash"},

{"{#PROCESS_NAME}":"zabbix_agentd"},

{"{#PROCESS_NAME}":"qmgr"},

{"{#PROCESS_NAME}":"pickup"},

{"{#PROCESS_NAME}":"master"}

]

}

第二个脚本,用于zabbix监控的具体监控项目(item)的key,通过脚本获取第一个脚本自动发现的进程的CPU和内存的具体使用情况与使用率。#!/bin/bash

#system process CPU&MEM use information

#mail: mail@huangming.org

mode=$1

name=$2

process=$3

mem_total=$(cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}')

cpu_total=$(( $(cat /proc/cpuinfo | grep "processor" | wc -l) * 100 ))

function mempre {

mem_pre=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`

echo "$mem_pre"

}

function memuse {

mem_use=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k]/100*'''${mem_total}''',k}' | grep "\b${process}\b" | cut -d" " -f1`

echo "$mem_use" | awk '{printf "%.f",$1*1024*1024}'

}

function cpuuse {

cpu_use=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`

echo "$cpu_use"

}

function cpupre {

cpu_pre=`tail -n +8 /tmp/.top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k]/('''${cpu_total}'''),k}' | grep "\b${process}\b" | cut -d" " -f1`

echo "$cpu_pre"

}

case $name in

mem)

if [ "$mode" = "pre" ];then

mempre

elif [ "$mode" = "avg" ];then

memuse

fi

;;

cpu)

if [ "$mode" = "pre" ];then

cpupre

elif [ "$mode" = "avg" ];then

cpuuse

fi

;;

*)

echo -e "Usage: $0 [mode : pre|avg] [mem|cpu] [process]"

esac

我们先来查看一下当前系统的内存和CPU大小情况:-- 内存

[root@Zabbix_19F ~]# cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}'

3832

-- CPU

[root@Zabbix_19F ~]# cat /proc/cpuinfo | grep "processor" | wc -l

8

执行脚本运行效果如下(获取监控项key值)[root@Zabbix_19F ~]# ./process_check.sh avg mem mysqld   #输出mysqld进程使用的内存(计算公式:3832*18.5/100)

708.92

[root@Zabbix_19F ~]# ./process_check.sh pre mem mysqld   #输出mysqld进程内存的使用率

18.5

[root@Zabbix_19F ~]# ./process_check.sh avg cpu mysqld   #单个CPU的mysqld进程使用率

3.9

[root@Zabbix_19F ~]# ./process_check.sh pre cpu mysqld   #所有CPU的mysqld进程的使用率

0.004875

配置zabbix_agentd,在agentd客户端的etc/zabbix_agentd.conf中增加userparameter配置,增加进程自动发现的key,和进程资源检测的key。hmracdb2:/opt/zabbix # vim etc/zabbix_agentd.conf.d/userparameter_script.conf

UserParameter=discovery.process,/opt/zabbix/scripts/discovery_process.sh

UserParameter=process.check[*],/opt/zabbix/scripts/process_check.sh $1 $2 $3

配置完之后重启agentd服务hmracdb2:/opt/zabbix # service zabbix_agentd restart

Shutting down zabbix_agentd                                                           done

Starting zabbix_agentd                                                                done

在zabbix服务器端手动获取监控项key值数据[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'discovery.process' -s 10.xxx.xxx.xxx

{

"data":[

{"{#PROCESS_NAME}":"ohasd.bin"},

{"{#PROCESS_NAME}":"ocssd.bin"},

{"{#PROCESS_NAME}":"oracle"},

{"{#PROCESS_NAME}":"oraagent.bin"},

{"{#PROCESS_NAME}":"crsd.bin"},

{"{#PROCESS_NAME}":"orarootagent.bi"},

{"{#PROCESS_NAME}":"watchdog/3"},

{"{#PROCESS_NAME}":"watchdog/2"},

{"{#PROCESS_NAME}":"watchdog/1"},

{"{#PROCESS_NAME}":"watchdog/0"}

]

}

[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[pre,mem,oracle]' -s 10.xxx.xxx.xxx

2.9

[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[avg,mem,oracle]' -s 10..xxx.xxx.xxx

111.186

[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[avg,cpu,oracle]' -s 10..xxx.xxx.xxx

4

[root@Zabbix_19F ~]# zabbix_get -p10050 -k 'process.check[pre,cpu,oracle]' -s 10..xxx.xxx.xxx

0.01

配置完agentd后,在zabbix服务器配置Web端的模版与监控项目item

Configuration --> Templates --> Create template -->

a73a22b0674cafaed0679d3c85b1a28e.png

创建完模版之后,添加自动发现规则

Discovery rules -->Create discovesy rule

686b2a630c74a30888ee62c266cfc7fe.png

b4986f5e2ffb03b83b93880dc07ecb65.png

Item prototypes--> Create item prototype

c6b4fa63f2acae79e2566da1c59735fc.png

也可以继续添加监控的主机和所需监控项,添加完后我们可以查看下监控的历史数据

1cdc5d52f99b03474e1440694c8ee17a.png

787a0da904542a2036f7255d2b7546b0.png

添加一个进程的CPU使用率的监控项

1e5bf10e0a6ab58fd6d0f03dfa482e49.png

查看历史数据

e0cefaa83cb92371a260787bcdf47681.png

当然还可以获取进程内存使用的具体大小情况

5e1c833b4f11dc88d21418b34be8088a.png

至此,zabbix自动发现进程内存和CPU使用情况并实时监控配置就完成了

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值