Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
U
ubains-module-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
郑晓兵
ubains-module-test
Commits
e49fb2bf
提交
e49fb2bf
authored
12月 26, 2025
作者:
PGY
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of
http://git.ubainsyun.com/bing/ubains-module-test
into develop
上级
93c5ab3a
9e9ba9a2
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
59 行增加
和
27 行删除
+59
-27
服务自检需求文档.md
辅助工具/脚本工具/服务自检/PRD/服务自检需求文档.md
+1
-1
check_server_health.ps1
辅助工具/脚本工具/服务自检/check_server_health.ps1
+58
-26
没有找到文件。
辅助工具/脚本工具/服务自检/PRD/服务自检需求文档.md
浏览文件 @
e49fb2bf
...
...
@@ -227,7 +227,7 @@
##### 12、容器信息收集(✅ 已实现):
函数名称:Test-ContainerInformation
查询当前服务器上所有容器信息(包含未运行与运行中的信息),可以通过docker inspect来获取MAC地址、端口映射信息、启动文件位置。
信息打印排版:先打印运行中的容器信息,再打印未运行的容器信息。
信息打印排版:先打印运行中的容器信息,再打印未运行的容器信息。
在容器信息打印之间增加分隔线。
##### 13、定时任务查询(待实现):
...
...
辅助工具/脚本工具/服务自检/check_server_health.ps1
浏览文件 @
e49fb2bf
...
...
@@ -1111,15 +1111,30 @@ function Test-ServerResources {
# 4. 检测内存使用情况
Write
-Log -Level
"INFO"
-Message
"检测内存使用情况..."
# 强制使用 C 语言环境,输出 CSV,避免本地化小数点和杂质
$memCmd
=
"LC_ALL=C free -m | awk -v OFS=',' '/^Mem:/ { printf ""%.1f,%.1f,%.1f"",
`$
2/1024,
`$
3/1024, (
`$
3/
`$
2)*100 }'"
# 使用 available 计算已用:used = total - available;兼容不同 free 格式
$memCmd
=
@
"
LC_ALL=C free -m | awk -v OFS=',' '
/^Mem:/ {
# 兼容:total used free shared buff/cache available
total =
`$
2
avail =
`$
7
if (avail == "" || avail == 0) {
# 某些 BusyBox/旧版 free 无 available,退化为: used =
`$
2 -
`$
4 (free)
avail =
`$
4
}
used = total - avail
pct = (total>0) ? (used/total)*100 : 0
printf "
%.2f,%.2f,%.1f
", total/1024, used/1024, pct
}'
"
@
$memResult
=
Invoke-SSHCommand -HostName
$Server
.IP -User
$Server
.User -Pass
$Server
.Pass -Port
$Server
.Port -Command
$memCmd
$memTotal
=
0.0
$memUsed
=
0.0
$memPercent
=
0.0
if
(
$memResult
.ExitCode -eq 0 -and
$memResult
.Output
)
{
$needFallback
=
(
$memResult
.ExitCode -ne 0 -or -not
$memResult
.Output
)
if
(
-not
$needFallback
)
{
$line
=
(
$memResult
.Output -split
"
`n
"
|
Where
-Object
{
$_
-match
'\S'
}
|
Select-Object
-First 1
)
if
(
$line
)
{
$parts
=
(
$line
.Trim
()
-replace
"
`r
"
,
""
)
-split
','
...
...
@@ -1129,38 +1144,55 @@ function Test-ServerResources {
$memTotal
=
[
double
]
::Parse
(
$parts
[
0],
$ci
)
$memUsed
=
[
double
]
::Parse
(
$parts
[
1],
$ci
)
$memPercent
=
[
double
]
::Parse
(
$parts
[
2],
$ci
)
}
catch
{
# Fallback: 读取 /proc/meminfo 计算
$fallbackCmd
=
@
"
}
catch
{
$needFallback
=
$true
}
}
else
{
$needFallback
=
$true
}
}
else
{
$needFallback
=
$true
}
}
if
(
$memTotal
-le 0 -or
$memUsed
-lt 0 -or
$memPercent
-le 0
)
{
$needFallback
=
$true
}
if
(
$needFallback
)
{
# Fallback: 用 /proc/meminfo 计算 (kB -> GB)
$fallbackCmd
=
@
"
awk -v OFS=',' '
BEGIN { t=0;
u
=0 }
/^MemTotal:/
{ t=
`$
2 }
/^MemAvailable:/ { a=
`$
2 }
BEGIN { t=0;
a
=0 }
/^MemTotal:/
{ t=
`$
2 } # kB
/^MemAvailable:/ { a=
`$
2 }
# kB
END {
if (t>0) {
u=t-a;
printf "
%.1f,%.1f,%.1f
", t/1024/1024, u/1024/1024, (u/t)*100
if (t>0 && a>=0) {
u=t-a
pct = (u/t)*100
printf "
%.2f,%.2f,%.1f
", t/1024/1024, u/1024/1024, pct
} else {
print "
0,0,0
"
}
}' /proc/meminfo
"
@
$fbRes
=
Invoke-SSHCommand -HostName
$Server
.IP -User
$Server
.User -Pass
$Server
.Pass -Port
$Server
.Port -Command
$fallbackCmd
if
(
$fbRes
.ExitCode -eq 0 -and
$fbRes
.Output
)
{
$fbLine
=
(
$fbRes
.Output -split
"
`n
"
|
Where
-Object
{
$_
-match
'\S'
}
|
Select-Object
-First 1
)
if
(
$fbLine
)
{
$fbParts
=
(
$fbLine
.Trim
()
-replace
"
`r
"
,
""
)
-split
','
if
(
$fbParts
.Count -ge 3
)
{
$ci
=
[
System.Globalization.CultureInfo]::InvariantCulture
$memTotal
=
[
double
]
::Parse
(
$fbParts
[
0],
$ci
)
$memUsed
=
[
double
]
::Parse
(
$fbParts
[
1],
$ci
)
$memPercent
=
[
double
]
::Parse
(
$fbParts
[
2],
$ci
)
}
}
}
$fbRes
=
Invoke-SSHCommand -HostName
$Server
.IP -User
$Server
.User -Pass
$Server
.Pass -Port
$Server
.Port -Command
$fallbackCmd
if
(
$fbRes
.ExitCode -eq 0 -and
$fbRes
.Output
)
{
$fbLine
=
(
$fbRes
.Output -split
"
`n
"
|
Where
-Object
{
$_
-match
'\S'
}
|
Select-Object
-First 1
)
if
(
$fbLine
)
{
$fbParts
=
(
$fbLine
.Trim
()
-replace
"
`r
"
,
""
)
-split
','
if
(
$fbParts
.Count -ge 3
)
{
$ci
=
[
System.Globalization.CultureInfo]::InvariantCulture
$memTotal
=
[
double
]
::Parse
(
$fbParts
[
0],
$ci
)
$memUsed
=
[
double
]
::Parse
(
$fbParts
[
1],
$ci
)
$memPercent
=
[
double
]
::Parse
(
$fbParts
[
2],
$ci
)
}
}
}
}
# 规整与保护
if
(
$memTotal
-gt 0
)
{
if
(
$memUsed
-lt 0
)
{
$memUsed
=
0
}
if
(
$memUsed
-gt
$memTotal
)
{
$memUsed
=
$memTotal
}
$memPercent
=
if
(
$memTotal
-gt 0
)
{
[
math]::Round
((
$memUsed
/
$memTotal
)
*
100, 1
)
}
else
{
0
}
$memTotal
=
[
math]::Round
(
$memTotal
, 2
)
$memUsed
=
[
math]::Round
(
$memUsed
, 2
)
}
else
{
Write
-Log -Level
"WARN"
-Message
"内存信息获取失败,free/awk或/proc/meminfo不可用"
}
$memStatus
=
if
(
$memPercent
-lt 70
)
{
"正常"
}
elseif
(
$memPercent
-lt 90
)
{
"警告"
}
else
{
"危险"
}
$memColor
=
if
(
$memPercent
-lt 70
)
{
"SUCCESS"
}
elseif
(
$memPercent
-lt 90
)
{
"WARN"
}
else
{
"ERROR"
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论