阿里云特别卡,卡成翔,实在是找不出原因所在(对比Linode)

原先一直使用的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%,面对软件提交或者而已攻击毫无压力。现在搬迁到阿里云,却几个人在线都无法承受。

阿里云CPU占用低得可怜,无法使用的感觉

图片描述

图片描述

数据量删减了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 秒
阅读 11.6k
7 个回答
  • 首先:

原先使用的是dedecms扩建的插件程序,高峰发布量一天6万多条都毫无压力,现在改成了yii2 MVC框,搬迁到阿里云,发布一条都得两三秒

两个主机部署的程序不一样,性能没有可比性。目测原 linode 的程序应该是用到了缓存。

  • 其次: fpm 配置可以优化。

yii2 框架很重,vendor 目录很多第三方的扩展容易造成内存泄漏(php 的 gc 不怎么靠谱)。建议 fpm 的进程管理方式改成 static 模式

pm = static
pm.max_children = 30
pm.max_requests = 50

1GB内存1个核心,开太多PHP-FPM只会空占内存,不会提升性能,默认5个就够用了.我在Xubuntu上开发时只开1个PHP-FPM进程.同理,MySQL(MariaDB)的innodb_buffer_pool_sizeinnodb_log_file_size也不要搞太大:

innodb_buffer_pool_size=20M
innodb_log_file_size=10M
table_definition_cache=400
table_open_cache=400

这样下来,系统可用内存充足了,不进行swap了,应该就不会卡了.

道听途说阿里云IO性能比较差,如果程序的IO多 or DB自建,考虑买SSD吧

DB换成阿里云的RDS试试

建议你换回 linode 东京不就解决问题了吗。

新手上路,请多包涵

现在还有linode 东京的服务器吗 ?

瓶颈不仅仅只是CPU、网络,还有存储设备IO、网络、总线带宽、总线频率等等一堆参数。

不过我怀疑你的问题应该在存储设备IO上。

在卡的时候,跑个【top -d 1 】按1,再跑个【iostat -x -k -d 1】,把这两段日志发出来看看。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进