CPU使用率超过N%如何重启服务?
How to restart a service when the CPU usage is over N%?
我在服务器 (ubuntu 18.04) 上托管了一个网站,该服务器具有 2 个内核 CPU 和 4GB 内存。我的网站通常平均有 200 个实时并发会话(在线用户)。
另外,那200个在线用户,资源占用率差不多:
- 50% 的内存
- 65% 的 CPU
需要注意的是,我的网站是Q/A网站。因此,用户来到我的网站并提出他们在不同领域的问题。有时在电视比赛中,提出一个问题,人们会立即来到我的网站进行搜索。或者他们在 google 中搜索并找到我网站的 link 然后他们入侵我的网站。
在那种情况下,我服务器的 CPU 将使用超过 90%,这主要是因为 MySQL 服务。
另外,还有一种情况。当 google-bot 爬虫开始索引我网站的 link 或检查损坏的 link 时,同样的 CPU 用法再次发生。关键是,我现在不能增加服务器资源。将来我的网站获得赞助商时,我会这样做。
因此,作为解决方法,我只是尝试编写一个脚本,当 CPU 使用率超过 90% 时自动重启 MySQL 服务。目前,当我发现我的网站出现故障或页面加载延迟时,我会手动执行此操作。
经过一些研究,我可以通过这个命令得到实时的CPU使用百分比:
echo $[100-$(vmstat 1 2|tail -1|awk '{print }')]
另外,我这样重启MySQL:
systemctl restart mysql
我的确切问题是,我怎样才能将该条件准确地写成 Linux bash 脚本?
#!/bin/bash
if <how to check CPU usage> then
systemctl restart mysql
fi
如果你真的想走这条路,看看使用率是否超过90%就可以了。然后 运行 这个脚本周期性地使用 cron
.
#! /bin/bash
(( usage = 100 - $(vmstat 1 2 | tail -n1 | awk '{print }') ))
if (( usage > 90 )); then
systemctl restart mysql
fi
我在服务器 (ubuntu 18.04) 上托管了一个网站,该服务器具有 2 个内核 CPU 和 4GB 内存。我的网站通常平均有 200 个实时并发会话(在线用户)。
另外,那200个在线用户,资源占用率差不多:
- 50% 的内存
- 65% 的 CPU
需要注意的是,我的网站是Q/A网站。因此,用户来到我的网站并提出他们在不同领域的问题。有时在电视比赛中,提出一个问题,人们会立即来到我的网站进行搜索。或者他们在 google 中搜索并找到我网站的 link 然后他们入侵我的网站。
在那种情况下,我服务器的 CPU 将使用超过 90%,这主要是因为 MySQL 服务。
另外,还有一种情况。当 google-bot 爬虫开始索引我网站的 link 或检查损坏的 link 时,同样的 CPU 用法再次发生。关键是,我现在不能增加服务器资源。将来我的网站获得赞助商时,我会这样做。
因此,作为解决方法,我只是尝试编写一个脚本,当 CPU 使用率超过 90% 时自动重启 MySQL 服务。目前,当我发现我的网站出现故障或页面加载延迟时,我会手动执行此操作。
经过一些研究,我可以通过这个命令得到实时的CPU使用百分比:
echo $[100-$(vmstat 1 2|tail -1|awk '{print }')]
另外,我这样重启MySQL:
systemctl restart mysql
我的确切问题是,我怎样才能将该条件准确地写成 Linux bash 脚本?
#!/bin/bash
if <how to check CPU usage> then
systemctl restart mysql
fi
如果你真的想走这条路,看看使用率是否超过90%就可以了。然后 运行 这个脚本周期性地使用 cron
.
#! /bin/bash
(( usage = 100 - $(vmstat 1 2 | tail -n1 | awk '{print }') ))
if (( usage > 90 )); then
systemctl restart mysql
fi