
github真是太劲了。
开始clone脚本:
sudo git clone https://github.com/SimplyLinuxFAQ/health-check-script.git
进入目录:cd health-check-script/
由于health-check.sh文件没有执行权限,需要加上可执行权限sudo chmod +x health-check.sh,然后执行./health-check.sh。
脚本大概分为几个部分,现罗列其中的几个。
1、 系统基本信息
脚本写的非常好,比如查看hostname,即/etc/hostname文件里面的内容。整个指令结构显示看hostname -f是否执行成功,然后hostname -f或者hostname -s,也就是 long host name或者 short host name。 &&为与, ||时或。
hostname -f &>/dev/null &&printf "Hostname : $(hostname -f)" || printf "Hostname : $(hostname -s)"
2、 磁盘Disk Usage
FS_USAGE=$(df -PThl -x tmpfs -x iso9660 -x devtmpfs -x squashfs|awk '!seen[$1]++'|sort -k6n|tail -n +2)
3、负载率uptime
echo -e "Current Load Average : $(uptime|grep -o "load average.*"|awk '{print $3" " $4" " $5}')"
4、三次重启事件
last -x 2> /dev/null|grep reboot 1> /dev/null && /usr/bin/last -x 2> /dev/null|grep reboot|head -3 || \
5、三次关机事件
last -x 2> /dev/null|grep shutdown 1> /dev/null && /usr/bin/last -x 2> /dev/null|grep shutdown|head -3 || \
6、占用cpu最高的进程
ps -eo pcpu,pid,ppid,user,stat,args --sort=-pcpu|grep -v $$|head -6|sed 's/$/\n/'
7、占用内存最高的进程
ps -eo pmem,pid,ppid,user,stat,args --sort=-pmem|grep -v $$|head -6|sed 's/$/\n/'
这个脚本关注点在系统信息、磁盘、内存、进程信息,没有打印网络状态,需要监控的进程等等信息,可以使用指令iostat、ps -ef | grep your_process。在局域网中,如果循环可以读取/etc/hosts文件内容,按照ip来远程到linux主机ssh ip_addrsss,执行脚本内容来检查整个服务器的信息。
最后看一下测试效果,检查结果正常的话,会有颜色提示的,这也是笔者才知道shell可以设置颜色的。开始位是\e[ , 结束位是\e[0m ,第一个数字代表字体颜色,第二个数字代表底色,当然还可以有其他下划线等等特殊效果。
GCOLOR="\e[4732m ------ OK/HEALTHY \e[0m"
WCOLOR="\e[4331m ------ WARNING \e[0m"
CCOLOR="\e[4731m ------ CRITICAL \e[0m"
笔者从生产系统上和网络资料上总结出几种优化脚本,脚本从磁盘和内存方面入手,让Linux系统保持活力。特别是第三种清理缓存释放内存,可以结合笔者以前的文章-Linux健康检查脚本health-check-script来做进一步的包装,特别是在做大量数据备份之后,完成自动检测和清理工作。
下面的delete_data函数中的三条命令可以完成目录下所有文件、log文件和log.gz文件按过期时间清理。
delete_data()
{
delete_time=$1
#清理目录下所有过期文件
find /home/pi/log/ -mtime +$delete_time -exec rm -r {} \
#清理目录下.log过期文件
find /home/pi/log/ -mtime +$delete_time -name '*.log' -exec rm -r {} \
#清理目录下.log.gz过期文件
find /home/pi/log/ -mtime +$delete_time -name '*.log.gz' -exec rm -r {} \
}
2.1目录下文件单独压缩打包
#将/home/pi/log/目录下的.log文件打包成.gz文件,
find /home/pi/log/ -name '*.log' -exec gzip -f {} \
运行测试,默认gzip 会删除源文件,并生成xx.gz文件。
zcat filename.gz 可以直接查看文件内容。gunzip –c filename.gz 可以解压缩并保留源文件,但是解压后显示在标准输出上,没有解压后文件。gunzip -cv filename.gz >filename ,可以保留源文件和压缩后文件,-v是显示进度。压缩保留源文件是 gzip -cv filename > filename.gz 。
2.2目录下文件以前一起打包压缩
gzip无法压缩文件夹,仅用于压缩单个文件,要压缩文件夹,应该使用tar + gzip ,即是tar -z。
#将log目录下的文件打包并以时间命令,打包后以 gzip 压缩
tar -zcvf $(date +%Y%m%d%H%M%S)log.tar.gz log/
tar -ztvf log.tar.gz可以查看包内有哪些文件。
tar -zxvf 20210219143137log.tar.gz 解压缩到当前目录
tar -zxvf 20210219143137log.tar.gz -C log2/ 将包解压到log2目录下。
频繁的文件访问(特别是数据备份后)会导致系统的Cache使用量大增。sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。
这里我们来看一下 buff/cache的作用。
buffer指Linux内存的 缓冲区缓存 Buffer cache,cache指Linux内存中的 页面缓存 Page cache。
Cache(Page cache,页面缓存): 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有read/write *** 作的时候。
Buffer(Buffer cache,缓冲区缓存): 主要是针对块设备进行缓存的,比如当我们对一个文件进行写 *** 作的时候,page cache的内容会被改变,而buffer cache则可以用来将page标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写(writeback)时,就不用将整个page写回,而只需要写回修改的部分即可。
Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。怎么手动清除呢?修改/proc/sys/vm/drop_caches 的值。看看英语说明:
to free pagecache, use echo 1 >/proc/sys/vm/drop_caches
to free dentries and inodes, use echo 2 >/proc/sys/vm/drop_caches
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
即3可以释放所有类型的缓存。
同时为了防止数据丢失,命令sync 将脏页的内容写回硬盘,但可能伴随着系统磁盘IO飙高。
运行free -m命令,再运行下面的脚本中的命令,发现 buff/cache减少了21M。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)