内存使用率已超过 90%
这个告警表明您的服务器 `192.168.1.208` 内存使用率已超过 90%,需要立即处理。以下是完整的解决方案:
### 紧急处理步骤
1. **立即检查内存状态**
```bash
# 登录目标服务器
ssh 192.168.1.208
# 查看内存使用TOP 5进程
top -o %MEM -n 1 | head -n 12
# 或使用更直观的工具
apt install htop -y && htop
```
2. **快速释放内存**
```bash
# 清理缓存(安全操作)
sync && echo 3 > /proc/sys/vm/drop_caches
# 重启高内存进程(需确认业务影响)
systemctl restart 占用内存最多的服务名
```
### 详细排查方案
#### 1. 分析内存使用情况
```bash
# 查看详细内存分配
free -h
cat /proc/meminfo
# 检查内存占用进程
ps aux --sort=-%mem | head -n 10
```
#### 2. 持久化解决方案
**A. 应用层优化**
```bash
# 调整JVM应用内存参数(Java应用)
export JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC"
# 调整其他服务配置
vim /etc/systemd/system/your_service.service
```
添加:
```ini
MemoryHigh=80% # 内存超过80%时限制分配
MemoryMax=90% # 硬性内存上限
```
**B. 系统层优化**
```bash
# 调整swappiness
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
# 创建交换分区(若无)
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
```
#### 3. 监控配置优化
```yaml
# 在Prometheus规则文件中添加更智能的告警规则
groups:
- name: memory-alerts
rules:
- alert: 内存使用率过高
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m # 持续5分钟才触发
labels:
severity: critical
annotations:
summary: "{{ $labels.instance }} 内存持续过高"
description: "{{ $labels.instance }} 内存使用率已达 {{ $value }}%,请检查进程:\n{{ with printf \"top -b -n 1 -o %%MEM | head -n 10 | tail -n +8\" | cmd }}{{ . }}{{ end }}"
```
### 长期预防措施
1. **扩容方案**
```bash
# 示例:通过K8s调整资源限制
kubectl set resources deployment/your-deploy --limits=memory=4Gi
```
2. **自动修复脚本**
```bash
#!/bin/bash
THRESHOLD=90
USAGE=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
echo "$(date) - 内存使用率 $USAGE%" >> /var/log/memory_clean.log
systemctl restart problem-service
fi
```
设置crontab定期检查:
```bash
*/5 * * * * /path/to/script.sh
```
3. **架构优化建议**
- 添加Redis缓存层减少数据库压力
- 实施微服务拆分降低单节点负载
- 考虑使用内存分析工具:Valgrind、gperftools
### 告警处理验证
1. **确认告警解除**
```bash
# 查看当前内存使用
watch -n 1 'free -h'
# 在Prometheus验证指标
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes
```
2. **标记告警为已解决**
```bash
# 如果是Alertmanager界面,可以手动标记为resolved
```
请根据您的具体业务场景选择适合的处理方式。如果是生产环境,建议先在测试环境验证方案可行性。
欢迎来撩 : 汇总all