面试题答案
一键面试#!/bin/bash
log_file="memory_monitor.log"
function log_message {
local message=$1
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> $log_file
}
function check_memory_usage {
local mem_usage=$(free -h | awk 'NR==2{printf "%.2f%%", ($3/$2)*100}')
log_message "当前内存使用率: $mem_usage"
if (( $(echo "$mem_usage > 80" | bc -l) )); then
log_message "内存使用率超过80%,尝试清理系统缓存"
if sudo sync; then
if sudo sysctl vm.drop_caches=3; then
log_message "系统缓存清理成功"
else
log_message "清理系统缓存时,sysctl命令执行失败"
fi
else
log_message "清理系统缓存时,sync命令执行失败,可能权限不足"
fi
else
log_message "内存使用率未超过80%,无需清理缓存"
fi
}
trap 'log_message "脚本意外终止"; exit 1' SIGTERM SIGINT
if [ -w $log_file ] || [ -z $log_file ]; then
check_memory_usage
else
log_message "日志文件 $log_file 不可写,无法记录日志"
echo "日志文件 $log_file 不可写,无法记录日志"
fi
上述脚本功能如下:
- 监控内存使用率:通过
free -h
命令获取内存使用信息,并计算内存使用率。 - 缓存清理:当内存使用率超过80%时,执行
sudo sync; sudo sysctl vm.drop_caches=3
命令清理系统缓存。 - 日志记录:每次监控的内存使用率和处理情况都会记录到
memory_monitor.log
日志文件中。 - 异常处理:
- 使用
trap
捕获SIGTERM
和SIGINT
信号,在脚本意外终止时记录日志。 - 检查日志文件是否可写,若不可写则记录错误日志并给出提示。
- 在执行
sudo
命令清理缓存时,若命令执行失败,记录相应错误信息。
- 使用