原先一直使用的Linode,默认的Centos7 + nginx + php-fpm,自己yum 安装的这些。在阿里云上也是同样的,1G 内存,1核CPU,也是自己yum install安装的php-fpm
mariadb
。但是运行起来特别卡,卡成翔。
[root@aliyun php-fpm.d]# systemctl status php-fpm
php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled)
Active: active (running) since Thu 2015-06-25 22:20:29 CST; 2 days ago
Main PID: 11116 (php-fpm)
Status: "Processes active: 0, idle: 35, Requests: 77890, slow: 0, Traffic: 0. 3req/sec"
CGroup: /system.slice/php-fpm.service
├─ 2691 php-fpm: pool www
├─ 2695 php-fpm: pool www
├─ 2697 php-fpm: pool www
├─ 2700 php-fpm: pool www
├─ 2701 php-fpm: pool www
├─ 2702 php-fpm: pool www
├─ 2703 php-fpm: pool www
├─ 2810 php-fpm: pool www
├─10042 php-fpm: pool www
├─10045 php-fpm: pool www
├─10046 php-fpm: pool www
├─10049 php-fpm: pool www
├─10053 php-fpm: pool www
├─10054 php-fpm: pool www
├─10056 php-fpm: pool www
├─10058 php-fpm: pool www
├─10060 php-fpm: pool www
├─10062 php-fpm: pool www
├─10064 php-fpm: pool www
├─10066 php-fpm: pool www
├─10068 php-fpm: pool www
├─10070 php-fpm: pool www
├─10072 php-fpm: pool www
├─10074 php-fpm: pool www
├─10077 php-fpm: pool www
├─10079 php-fpm: pool www
├─10080 php-fpm: pool www
├─10082 php-fpm: pool www
├─10084 php-fpm: pool www
├─10086 php-fpm: pool www
├─10096 php-fpm: pool www
├─10097 php-fpm: pool www
├─10099 php-fpm: pool www
├─11116 php-fpm: master process (/etc/php-fpm.conf)
├─14485 php-fpm: pool www
└─20080 php-fpm: pool www
Jun 25 22:20:29 aliyun systemd[1]: Started The PHP FastCGI Process Manager.
将pm.max_children由50改为70之后
反而变少了?
[root@aliyun php-fpm.d]# systemctl restart php-fpm
[root@aliyun php-fpm.d]# systemctl status php-fpm
php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled)
Active: active (running) since Sat 2015-06-27 22:35:33 CST; 1s ago
Main PID: 19780 (php-fpm)
Status: "Ready to handle connections"
CGroup: /system.slice/php-fpm.service
├─19780 php-fpm: master process (/etc/php-fpm.conf)
├─19782 php-fpm: pool www
├─19783 php-fpm: pool www
├─19784 php-fpm: pool www
├─19785 php-fpm: pool www
└─19786 php-fpm: pool www
Jun 27 22:35:33 aliyun systemd[1]: Started The PHP FastCGI Process Manager.
[root@aliyun php-fpm.d]#
cp /etc/my.cnf /etc/my.cnf.bak
cp /usr/share/mysql/my-large.cnf /etc/my.cnf
可还是一样,怎么都是那么卡。程序yii2,有软件提交,但是原先放在linode的时候,软件提交更多,每分钟1万次,Linode经常报disk io rate - has execeeded the notification threshold (5000) for disk io rate by averaging 5520.83
,但是网站打开一点儿都不卡,原先使用的是dedecms扩建的插件程序,高峰发布量一天6万多条都毫无压力,现在改成了yii2 MVC框,搬迁到阿里云,发布一条都得两三秒,可发现阿里云CPU占用5%不到,网站特别卡。原先在linode ,CPU占用一直都在80%以上,内存占用也接近80%,面对软件提交或者而已攻击毫无压力。现在搬迁到阿里云,却几个人在线都无法承受。
数据量删减了50%,居然还是卡。对比过linode与阿里云的/etc/my.cnf 还有 /etc/php-fpm.conf,/etc/nginx.conf,把阿里云的调成 linode的2倍,还是卡。
卡成翔
使用Ctrl+F5刷新,会经常 504。不敢用注释的那一段,一使用就特别卡,卡成翔。myisam 的表
public function actionIndex()
{
$url = myUrl::lUrl('info');
if (\Yii::$app->request->getPathInfo() != ltrim($url, '/')) {
return $this->redirect($url, 301);
}
$subQuery = Area::find()->where(['level' => 1]);
$rowsInfo = Info::find()
->select('tid,uid,uname,title,d1,a.name d1name,ip')
->leftJoin(['a' => $subQuery], ' a.id=d1 ')
->where(['status' => 1])
->orderBy(['tid' => SORT_DESC])
->limit(90)
->asArray()
->all();
// $sQuery = Info::find()
// ->select('tid,uid,uname,title,d1,a.name d1name,ip')
// ->leftJoin(['a' => $subQuery], ' a.id=d1 ')
// ->where(['status' => 1])
// ->andWhere([' > ', 'addtime', time() - 8600 * 200])
// ->orderBy(['tid' => SORT_DESC])
// ->limit(300);
//
// $rowsInfo = (new Query())->from(['s' => $sQuery])
// ->groupBy([new Expression('concat(d1,IF(uid=0,ip,uid))')])
// ->orderBy(['tid' => SORT_DESC])
// ->limit(100)
// ->all();
////
// $rowsInfo = Info::find()
// ->select('tid,uid,uname,title,d1,a.name d1name ')
// ->leftJoin(['a' => $subQuery], ' a.id=d1 ')
// ->where(['status' => 1])
// ->andWhere([' > ', 'addtime', time() - 86400 * 300])
// ->groupBy([new Expression(' IF(uid>0,uid,ip) ')])
// ->orderBy(['tid' => SORT_DESC])
// ->limit(80)
// ->asArray()
// ->all();
return $this->render('index', [
'rowsInfo' => $rowsInfo
]);
}
phpMyAdmin中的一段SQL运行时间的对比
select max(uptime) from info where 1
Linode: 查询花费 1.0224 秒
阿里云:查询花费 5.2453 秒
首先:
两个主机部署的程序不一样,性能没有可比性。目测原 linode 的程序应该是用到了缓存。
其次: fpm 配置可以优化。
yii2 框架很重,vendor 目录很多第三方的扩展容易造成内存泄漏(php 的 gc 不怎么靠谱)。建议 fpm 的进程管理方式改成 static 模式