Laravel部署后,CPU 使用率过高,配合使用swoole。

我在部署 Laravel 应用程序时遇到严重问题。当访问量稍微大一点的时候,cpu马上就到100%了,
找了一大堆文档和说明,都是说明laravel处理并发的能力太弱,还不如原生的php。最后找到swoole解决问题。

1、php下载swoole插件,这个不用多介绍,自己自行百度即可。

2、larave 安装 laravel-swoole

composer require swooletw/laravel-swoole

如果存在版本冲入,可强制下载

composer require swooletw/laravel-swoole --ignore-platform-reqs

3、发布配置文件,并修改对应端口。

php artisan vendor:publish --tag=laravel-swoole

这个是成功后的界面:

Laravel部署后,CPU 使用率过高,配合使用swoole。

修改对应配置端口号:

Laravel部署后,CPU 使用率过高,配合使用swoole。

4、注册:config/app.php

'providers' => [
...........
SwooleTW\Http\LaravelServiceProvider::class,
]

4、配置代理(伪静态)

902 端口根据自己的配置

location / {
    proxy_pass http://127.0.0.1:902; 
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    rewrite /sw/(.*) /$1 break;
    proxy_redirect off;
}
location /admin {
    try_files $uri $uri/ /index.php?$query_string;
}

5、命令

开始运行
php artisan swoole:http start
常驻运行:
php artisan swoole:http start &
停止
php artisan swoole:http stop

注意事项

如果存在异常,首先查看命令行的php版本是否正确

  • 在 Laravel 中启用 Swoole 后,使用 Guzzle HTTP 客户端(或类似的 HTTP 客户端)进行请求时出现错误,可能是由于 Swoole 的协程特性与某些同步代码不兼容。

  • post请求出错
    原文:

    $response = $client->post('https://xxx.com/api/id-verify/two-element', [  
             'headers' => [  
                 'Content-Type'=>'text/plain',
                 'app-id' => 80003,
                 'req-sn' => '"'.$this->CreateOrder().'"',
             ],  
             'body' => $encryptedBase64,  
         ]); 
    $body = $response->getBody()->getContents();

    需要修改为:

use Swoole\Coroutine\Http\Client as swoole_client;
 $client = new swoole_client('apx.yuanxinw.com', 443, true);
        $client->setHeaders([
            'Content-Type' => 'text/plain',
            'app-id' => 80003,
            'req-sn' => '"' . $this->CreateOrder() . '"',
        ]);
$client->post('/api/id-verify/two-element', $encryptedBase64);
$body = $client->body;
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

有没有可能是你没有对其进行 fpm 调优,然后你有观察过你的请求量的变化吗?是平稳的,还是激增的?有没有可能优化过接口?

1周前 评论
Get_old (楼主) 1周前

你这样使用和开启opcache区别不是很大,laravel有大量同步代码,无法完美使用协程,同时数据库等链接也没有连接池,总体来说只是省略的常驻内存文件语法解析这些,另外官方也有类似扩展octane,可以看一下~

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!