swoole替代php-fpm,能否使用swoole http server 替代php-fpm ?

news/2024/7/7 13:38:34

我在本机上使用swoole+yii2 bacic 模板测试。 fpm qps在300+,swoole可以到500+。但是有个问题是压测时swoole把整整4GB的空闲内存都吃光了,很明显这是worker执行的时候出现了内存泄露,因为结束之后内存并没有降下来,杀死进程后才释放了对应的内存。下面是我的代码,请问有什么问题?为什么在请求结束时没有释放对应的内存,还是说要手动清理?

defined('YII_DEBUG') or define('YII_DEBUG', true);

defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');

require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

class AppServer{

public $httpServer;

public $config;

public function __construct(){

$this->config= require(__DIR__ . '/../config/web.php');

$this->httpServer=new swoole_http_server("0.0.0.0", 9501);

$this->httpServer->set(

array(

'worker_num' => 4,

'daemonize' => false,

'max_request' => 10000,

'dispatch_mode' => 1

)

);

$this->httpServer->on('workerStart',[$this,'onWorkerStart']);

$this->httpServer->on('request', function ($request, $response) {

if( isset($request->server) ) {

foreach ($request->server as $key => $value) {

$_SERVER[ strtoupper($key) ] = $value;

}

unset($_SERVER['PHP_SELF']);

}

if( isset($request->get) ) {

foreach ($request->get as $key => $value) {

$_GET[ $key ] = $value;

}

}

if( isset($request->post) ) {

foreach ($request->post as $key => $value) {

$_POST[ $key ] = $value;

}

}

ob_start();

//实例化yii对象

try {

$application = new yii\web\Application($this->config);

$application->request->setBaseUrl('');

//替换header

if(isset($request->header)){

foreach($request->header as $key =>$value){

$application->request->getHeaders()->set($key,$value);

}

}

$application->run();

$response->status($application->response->getStatusCode());

$headers=$application->response->getHeaders();

foreach ($headers as $name => $values) {

$name = str_replace(' ', '-', ucwords(str_replace('-', ' ', $name)));

// set replace for first occurrence of header but false afterwards to allow multiple

foreach ($values as $value) {

$response->header($name,$value);

}

}

} catch (Exception $e) {

var_dump($e);

}

$result = ob_get_contents();

ob_end_clean();

$response->end($result);

});

$this->httpServer->start();

}

public function onWorkerStart(){

}

}

new AppServer();


http://www.niftyadmin.cn/n/3571263.html

相关文章

qt 将数字显示到文本框_qt实现串口通信时候,把文本框的数据以16进制的形式发送的问题...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼qt实现串口通信时候,把文本框的数据以16进制的形式发送的问题1、我在网上找了函数,把数据转换为16进制,//字符串转换成16进制数据0-Fvoid porttest::StringToHex(QString str, QByteArray & …

LAMP之三:挂载NFS的Discuz论坛

一、 实验说明 1、通过DNS服务器实现负载均衡 2、为web服务器挂载NFS网络文件系统,保证两台web服务器数据的同步 3、实验平台环境 1)两台Apache服务器做负载均衡 2)一台cgi服务器挂载NFS网络文件系统,实现数据同步 3)一…

解决php的failed,解决failed-to-open-stream:-HTTP-request-failed!

当使用php5自带的file_get_contents方法来获取远程文件的时候,有时候会出现file_get_contents(): failed to open stream: HTTP request failed!这个警告信息。google或者baidu一下,好多这样的问题,解决的方法都是修改php.ini,把a…

Oracle 11g RAC INS-06006 Passwordless SSH connectivity not set up between the following node(s)

安装11g RAC的grid时,在Test互信的时候报错INS-06006 Passwordless SSH connectivity not set up between the following node(s) 奇怪的是"setup"互信过程却可以成功,只是在"test"过程中报错。可见下图: 这种情况引发原…

从零开始学习C语言(一)之读取文本文件(函数fgets)

为什么说是从零开始呢,只要是学计算机的都会学C,但那是学校的事了,我都还给老师了。老师对不住啊。您白教我位学生了。 最近开始学习C,原因:上司让我用C写一程序。大体是:通过daemon程序从/proc/net/…

php后端什么区别,PHP == 和 === 区别_后端开发

JS文件与PHP文件区别?_后端开发JS文件与PHP文件区别:JS文件是用来编写JavaScript语言的脚本文件,JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言,而PHP文件是用于编写PHP代码的一种脚本文件&…

不注册使用 .NET Reactor

.NET Reactor 是个好东西,只不过这家伙升级的速度非常快,加密算法经常变化,而且越来越厉害,实在懒得 "跟" 了。这类工具通常在 "壳" 上做了大量的工作,诸如什么 JIT Hook、native loader 之类的。…

centos 配置mysql环境变量_MySQL数据库之170419、Centos7下完美安装并配置mysql5.6

本文主要向大家介绍了MySQL数据库之170419、Centos7下完美安装并配置mysql5.6 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。linxu环境:centos7:x86_64 x86_64 x86_64 GNU/Linuxmysql:mysql-5.6.33-linux-glibc2.5-x86_64.…