博主在阿里云服务器上安装了主机软件Blesta后,阿里云后台频繁提示CPU超载,打开突发性能模式后,发现CPU负载到了100%。如下图所示:

直接在putty里面reboot整个系统后,负载瞬间降为2%。此时如果一直不访问网页的话,负载将维持在3%附近。如果仅是客户买东西,负载也不会高。

 
但是一旦管理员在后台添加产品,更新支付网关等操作后,负载就立马上来了。所以见使用blesta过程中,强烈建议管理员在后台操作添加产品、更新支付网关后,立马重启服务器,避免阿里云服务器重载运行,造成额外的费用或网站访问变慢。
 
但是过一过段时间后,CPU负载又上来了(阿里云服务器改为CPU限制负载在20%),如下图所示:
 
登录VPS,输入top
 
 
ps -ef|grep 6767后,显示正在执行blesta的cron定时任务index.php

ps -ef|grep 5974后,显示也是在执行blesta的cron定时任务index.php
ps -ef|grep  4915后,同样显示正在执行blesta的cron定时任务index.php
也就是说我们找到原因了,就是cron定时执行blesta的index.php时,导致cpu负载过高。
先kill掉所有的3个cron,把负载降下来。再找原因。
kill -9 5974
kill -9 6767
kill -9  4915
 
原因解释:

原因:定时任务脚本的同步未在规定时间内完成,crontab接下来的还会执行此脚本,很多个php进程,就会导致负载过高,甚至有些服务器会挂掉。(博主突然想到,之前wordpress资源越限也是这个wp-cron.php导致的)
 
根据blesta官方的安装指南:
定时执行php必须要每5分钟执行一次。这个好像太频繁了。官网的Cron Issues也没有过多的涉及这一部分知识。只是提到should run。
 
继续分析这个定时执行的作用,参考同为主机管理软件的whmcs,其关于定时任务的说明为:自动任务对于我们的WHMCS账单系统是非常重要的,用户的续期账单都要靠他提前送达给客户邮箱,虽然默认设定基本可用,但是对他的了解是必须滴。普通设置选定每天一次,然后在命令输入框,输入我们在WHMCS管理后台自动任务设定项目头部提供的命令,然后点击添加新计时程序作业,就可以了。
 
也就是说,我们没必要一直运行cron,但是也需要保证他一直运行。这里我们需要用到一个脚本,即:如果某进程占用CPU超过50%,则自动杀死这个进程。
 
编写checkcpu.sh脚本,实现如果php线程如果占用CPU超过70%且持续60s时,杀死这个进程,具体如下:
#!/bin/sh
# Happytang to monitor used CPU
record=0
while true;
do
cpu=$(top -b -n1 | grep "php" | head -1 | awk '{print $9}')
pid=$(top -b -n1 | grep "php" | head -1 | awk '{print $1}')
#cpu check
result=${cpu/.*}
if [[ $record == $pid ]];then kill -9 $pid;echo "$pid was killed";fi
if [[ $result > 70 || $result == 100 ]];then let record=${pid};else let record=0;fi
#echo
echo `date +%F" "%H:%M:%S`+" cpu:$result% record pid:$record pid:$pid"
sleep 60
done

  最后,运行下述命令,保证退出putty后脚本继续执行

nohup sh ./checkcpu.sh &

  如果需要停止运行这个脚本,则:

ps -ax #查看所有的进程pid
kill -9 pid //杀死一个某个pid

  本文参考了这篇文章这篇文章,首发于Happytang’s Blog

blesta运行造成阿里云服务器CPU频繁超载的原因分析的更多相关文章

  1. 服务器CPU使用率高的原因分析与解决办法

    我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...

  2. SQL SERVER数据库服务器CPU不能全部利用原因分析

    背景 客户凌晨把HIS数据库迁移到配置更高的新服务器,上午业务高峰时应用非常缓慢,严重影响到业务运行.   1.现象 通过SQL专家云实时可视化界面看到大量的绿点,绿点表示会话在等待某项资源,绿点越大 ...

  3. 阿里云服务器sshd-D cpu占用过高

    发现阿里云服务器cpu占用到达了100%,原因是被植入了挖矿程序,解决方法如下 1.使用top命令查看进程id 直接kill杀死该进程过一会就会重新启动. 2.查看该进程所在的文件目录 这个文件基本上 ...

  4. 阿里云服务器被挖矿minerd入侵的解决办法

    上周末,更新易云盘的时候,发现阿里云服务器CPU很高,执行 top 一看,有个进程minerd尽然占用了90%多的CPU, 赶紧百度一下,查到几篇文章都有人遇到同样问题 Hu_Wen遇到的和我最相似, ...

  5. 阿里云服务器被挖矿程序minerd入侵的终极解决办法[转载]

    突然发现阿里云服务器CPU很高,几乎达到100%,执行 top c 一看,吓一跳,结果如下: root 386m S : /tmp/AnXqV -B -a cryptonight -o stratum ...

  6. 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境

    在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境 阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿 ...

  7. 在阿里云服务器ubuntu14.04运行netcore

    从netcore1.0正式发布就很激动,想要赶紧学习. 最近博客园的一篇文章给了完整的指导非常感谢,但是在实际实现到发布到阿里云服务器遇到一些问题,记录下来. 首先上基础文章http://www.cn ...

  8. 阿里云服务器ubuntu安装java运行环境

    服务器 阿里云服务器ubuntu安装java运行环境 转:http://www.codingyun.com/article/45.html 今天来给大家介绍一下在阿里云ubuntu服务器下安装java ...

  9. 阿里云服务器用Docker配置运行nginx并访问

    一.Docker拉取nginx镜像 docker pull nginx:1.12.2 这里是下载的是nginx的1.12.2版本,其他版本的镜像请访问https://hub.docker.com/r/ ...

随机推荐

  1. 知识点一:OSI模型初识

    OSI(开放系统)模型是一组协议的集合,它使得两个不同的系统之间能够互相通信,分为七层 第一层:物理层 物理层负责把逐个的比特(01)从一个节点移动到下个节点 具体体现在如何把比特转换成电或者光信号. ...

  2. Crowd 批量添加用户(Postman 数据驱动)

    背景 最近公司大量新员工入职,需要批量创建 Crowd 用户.设置密码.分配应用组等机械性重复工作(主要还是懒~),故把这个加餐任务分配给刚来的测试同学去研究. 一是:让他了解下 Postman 的数 ...

  3. 你知道如何自动保存 Spring Boot 应用进程号吗

    1. 前言 欢迎阅读 Spring Boot 2 实战 系列文章. PID 对于系统运维来说并不陌生,但是对于一些开发者特别是新手还是要简单介绍一下的.它是 Process ID 的简称,是系统分配给 ...

  4. 拍照购物APP之可行性分析

    你一定有过这样的生活经历:走在路上发现一个陌生人的穿着非常符合自己的穿衣品味,想要购买一件同样款式的衣服却找不到购买地址,偷偷拍了张照片也只能留作纪念.此时,在手机上安装一款通过图片进行购物搜索的AP ...

  5. vue axios post请求下载文件,后台springmvc完整代码

     注意请求时要设置responseType,不加会中文乱码,被这个坑困扰了大半天... axios post请求:     download(index,row){         var ts =  ...

  6. [Abp vNext 入坑分享] - 2.简化项目结构

    一.简要说明 本篇文章根据我自己的需要对项目结果进行简化,让项目结构更符合我自己的要求,同时让项目跑起来.仅供参考 二.具体步骤 2.1卸载掉对我来说目前使用不上的项目,identityserver, ...

  7. Go gRPC进阶-proto数据验证(九)

    前言 上篇介绍了go-grpc-middleware的grpc_zap.grpc_auth和grpc_recovery使用,本篇将介绍grpc_validator,它可以对gRPC数据的输入和输出进行 ...

  8. 3. git获取历史版本

    1.使用gitbash进入git命令行,查看commit记录.操作如下: git log 1 2.找到你想提取的目标版本,复制对应的SHA值. 3.新建一个分支,操作如下: git branch 新分 ...

  9. python的历史和下载python解释器

    一.python的诞生 1.Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,创造了一种C和sh ...

  10. nodejs之https双向认证

    说在前面 之前我们总结了https的相关知识,如果不懂可以看我另一篇文章:白话理解https 有关证书生成可以参考:自签证书生成 正题 今天使用nodejs来实现https双向认证 话不多说,直接进入 ...