阿里云機(jī)器8h16g服務(wù)器 只運行了getway和注冊中心 服務(wù)器已經(jīng)進(jìn)行l(wèi)inux內(nèi)核優(yōu)化并安裝了event擴(kuò)展
使用SuperVisord啟動
worker進(jìn)程運行在阿里云ACK Serverless集群中 鏡像用的https://github.com/Tinywan/docker-php-webman
另一臺內(nèi)網(wǎng)阿里云服務(wù)器同樣進(jìn)行內(nèi)核優(yōu)化過 使用workerman進(jìn)行壓測
查看gateway狀態(tài) 有兩個進(jìn)程busy狀態(tài)
運行strace -ttp 19969
運行l(wèi)sof -nPp 19969
第一次使用getwayworker 麻煩大佬們幫忙看下這個問題是啥原因
workerman壓測調(diào)至1000連接 反復(fù)測試gateway沒有busy 大佬們我這該如何調(diào)優(yōu)
gateway機(jī)器下的信息
php擴(kuò)展
查看系統(tǒng)級別能夠打開的文件句柄的數(shù)量: cat /proc/sys/fs/file-max
內(nèi)核優(yōu)化設(shè)置
后續(xù)補(bǔ)充 直接終端啟用后正常 用SuperVisord啟動出現(xiàn)這個問題
在supervisor 使用root啟動,然后用su -c 命令切換別的用戶運行即可解決你這個問題,例如我這樣啟動
su -s /bin/bash www -c "cd /www/wwwroot/im && /www/server/php/74/bin/php think worker:gateway restart"
我的配置
壓測腳本。
<?php
ini_set('memory_limit', '512M');
require_once __DIR__ . '/../../vendor/autoload.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
$worker->onWorkerStart = 'connect';
function connect()
{
static $count = 0;
// 20000個鏈接
if ($count++ >= 20000) return;
// 建立異步鏈接
$con = new AsyncTcpConnection('ws://127.0.0.1:8282');
$con->onConnect = function ($con) {
connect(); // 遞歸調(diào)用connect
usleep(50000);
};
$con->onMessage = function ($con, $msg) {
echo "$msg|";
};
$con->onClose = function ($con) {
echo "c-";
};
Timer::add(50, function () use ($con) {// 當(dāng)前鏈接每50秒發(fā)個心跳包
$con->send('{"type":"ping"}');
});
$con->connect();
echo $count . "+";//echo $count, " connections complete\n";
}
Worker::runAll();