四、服務端核心優化:
五、測試
2 vcpu 4 gb (i/o優化) 100mbps (峰值)
$server = new \swoole_websocket_server("0.0.0.0", 9556);
$options = [
'max_connection' => 150000, // 最大鏈結數
'worker_num' => 6, // worker 數
// swfactoryprocess_finish: send failed, session#1 output buffer has been overflowed.
// 伺服器有大量tcp連線時,最差的情況下將會占用serv->max_connection * buffer_output_size位元組的記憶體
'socket_buffer_size' => 512 * 1024 * 1024, // m 必須為數字 用於設定客戶端連線最大允許占用記憶體數量
// 心跳檢測
'heartbeat_idle_time' => 30,
'heartbeat_check_interval' => 10,
// 'buffer_output_size' => 2 // 用於設定單次最大傳送長度 m
]; $server->set($options);
$server->on('open', function ($server, $req) );
$server->on('message', function ($server, $frame) }'
] )); }
break;
case 'opon':
file_put_contents('./fd.log', $frame->fd);
break;
default:
break;
} }if (file_exists('./fd.log')) }'
] )); }
});$server->on('close', function ($server, $fd) }'
] )); if ($fd == $testfd)
} error_log(
date('y-m-d h:i:s') . "當前伺服器 close 客戶端,現共有 " . count($server->connections) . " 個連線\n",
3, './result.log'
); });
$server->start();
客戶端核心優化:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
#net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
kernel.sysrq = 1
#優化net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_retries2=3
net.ipv4.tcp_orphan_retries=2
終端立馬生效命令:sysctl -p
vim generator.js
module.exports = ,
onconnect : function(client, done) );
done(); // 用於掛起鏈結後,關閉客戶程序;如果客戶端需要掛起程序,並保持長鏈結,注釋閉包函式中該方法即可
}, sendmessage : function(client, done) );
done();
}, options :
};
設定ulimit值(linux檔案控制代碼數量)優化開啟檔案數【永久生效】
vim /etc/security/limits.conf
* soft nofile 102400
* hard nofile 102400
備註:修改該檔案需要重啟系統生效
測試語句:websocket-bench -a 40000 -c 40000 -w 8 -t primus -p websockets ws: -g generator.js -o result.log
Tomcat優化 壓力測試
載入mod jk loadmodule jk module modules mod jk.so 配置mod jk jkworkersfile conf workers.properties jklogfile logs mod jk.log jkloglevel info 請求分發,對jsp檔案,d...
ab壓力測試 mysql MySQL壓力測試
1.什麼是壓力測試 壓力測試是針對系統的一種效能測試,但是測試資料與業務邏輯無關,更加簡單直接的測試讀寫效能 2.壓力測試的指標 qps 每秒鐘處理完請求的次數 tps 每秒鐘處理完的事務次數 併發量 系統能同時處理的請求數 3.壓力測試工具 mysqlslap sysbench jmeter 長時...
mysql 壓力測試 golang 壓力測試
1.壓力測試 1.1.1.go怎麼寫測試用例 開發程式其中很重要的一點是測試,我們如何保證 的質量,如何保證每個函式是可執行,執行結果是正確的,又如何保證寫出來的 效能是好的,我們知道單元測試的重點在於發現程式設計或實現的邏輯錯誤,使問題及早暴露,便於問題的定位解決,而效能測試的重點在於發現程式設計...