在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Netty NIO框架性能压测之如何实现长链接

155次阅读
没有评论

共计 4460 个字符,预计需要花费 12 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 Netty NIO 框架性能压测之如何实现长链接,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

压测准备

需要将 ulimit -n 改大,否则 nio 链接开不大。

准备 4 台机器 (1 台 netty 服务器,3 台压测机)

使用 apache 的 ab 做压测工具

开始干活

压测代码:

package org.dueam.sample.netty;
package org.dueam.sample.netty;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.Executors;
 
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.DynamicChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.ChannelHandler.Sharable;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
 
public class ChatServer {
 
 public static void main(String[] args) throws Exception {if(args.length  1){args = new String[]{ 9876 , true 
 ChannelFactory factory = new NioServerSocketChannelFactory(Executors
 .newCachedThreadPool(), Executors.newCachedThreadPool());
 
 ServerBootstrap bootstrap = new ServerBootstrap(factory);
 
 ChatServerHandler handler = new ChatServerHandler();
 ChannelPipeline pipeline = bootstrap.getPipeline();
 pipeline.addLast(chat , handler);
 
 bootstrap.setOption(child.tcpNoDelay , true);
 bootstrap.setOption(child.keepAlive , true);
 int port = Integer.valueOf(args[0]);
 bootstrap.bind(new InetSocketAddress(port));
 
 boolean fillChat =  true .equals(args[1]);
 if (fillChat) {ChannelManagerThread cmt = new ChannelManagerThread();
 cmt.start();
 
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 while (true) {String command = br.readLine();
 if (dump .equals(command)) {System.out.println( 当前活着的数量:  + channel.size());
 } else if (help .equals(command)) {
 System.out.println( 命令列表: 
 System.out.println( dump: 打印当前情况 
 System.out.println( help: 帮助文档 
 
 final static Random random = new Random();
 static int max = 0;
 static class ChannelManagerThread extends Thread {
 @Override
 public void run() {while (true) {
 try {if(max   channel.size()){max = channel.size() ;
 System.out.println(live: +channel.size());
 
 for (Channel s : channel.values()) {if (random.nextInt(100) 70) {ChannelBuffer cb = new DynamicChannelBuffer(256);
 cb.writeBytes(Hey! 有人来找你了! .getBytes());
 s.write(cb);
 sleep(500);
 } catch (InterruptedException e) {
 
 
 final static Map Integer, Channel  channel = new HashMap Integer, Channel 
 
 static void log(String message) {System.out.println(message);
 
 @Sharable
 static class ChatServerHandler extends SimpleChannelHandler {
 @Override
 public void channelConnected(ChannelHandlerContext ctx,
 ChannelStateEvent e) {Channel ch = e.getChannel();
 ChannelBuffer cb = new DynamicChannelBuffer(256);
 cb.writeBytes(Hell! 你来了啊! .getBytes());
 ch.write(cb);
 channel.put(e.getChannel().getId(), e.getChannel());
 
 
 @Override
 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
 
 @Override
 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {e.getCause().printStackTrace();
 channel.remove(e.getChannel().getId());
 log(remove channel by exception! id:  + e.getChannel().getId());
 
 e.getChannel().close();
 
 @Override
 public void channelDisconnected(ChannelHandlerContext ctx,
 ChannelStateEvent e) throws Exception {channel.remove(e.getChannel().getId());
 log(remove channel by exception! id:  + e.getChannel().getId());
 
}

压测方式:

# 加大超时和并发量,并使用 keep-alive 的方式保持住端口
./ab -n 20000 -c 20000 -k -t 999999999 -r http://192.168.216.30:9876/

压测结果

内存损耗:

[root@cap216030 ~]# free -k -t -s 10
--  原始内存
 total used free shared buffers cached
Mem: 4149076 189828 3959248 0 13196 95484
-/+ buffers/cache: 81148 4067928
Swap: 2096472 208 2096264
Total: 6245548 190036 6055512
 
--  执行  chat server 之后
 total used free shared buffers cached
Mem: 4149076 207236 3941840 0 13216 96244
-/+ buffers/cache: 97776 4051300
Swap: 2096472 208 2096264
Total: 6245548 207444 6038104
 
-- 59471  个 nio 连接之后
 total used free shared buffers cached
Mem: 4149076 474244 3674832 0 13328 96132
-/+ buffers/cache: 364784 3784292
Swap: 2096472 208 2096264
Total: 6245548 474452 5771096

结论:

Netty nio 可以轻松将链接开到 6W,每个线程大概损坏 5k 左右的系统内存

后续压测方案

编写 Java 客户端做内容实时双向推送

使用 100 台机器每台机器起 1000 个线程来模拟客户端进行压测

关于“Netty NIO 框架性能压测之如何实现长链接”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4460字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 日日射影院 | 九九热在线视频观看这里只有精品 | 国产成人免费不卡在线观看 | 亚洲成人色图网 | www丫丫国产成人精品 | 国产一区二区三区免费视频 | 日本乱偷人妻中文字幕在线 | 欧美成人精品高清在线播放 | 国产精品一区二区不卡 | 野花在线无码视频在线播放 | 一本色道久久爱88av俺来也 | 无码人妻一区二区三区在线视频 | 国产一区二区三区久久精品小说 | 吃奶摸下激烈床震视频试看 | 好男人好资源电影在线播放 | 日日操日日干 | 偷拍自拍视频在线 | 国产极品粉嫩福利姬萌白酱 | 国产欧美日韩综合精品二区 | 亚洲成a人片在线不卡一二三区 | 亚洲日本色| 丰满妇女毛茸茸刮毛 | 亚洲视频免费播放 | 久久精品国产www456c0m | 福利片在线观看免费高清视频 | 欧美一级高清免费a | 国产日韩欧美亚欧在线 | 天天夜碰日日摸日日澡 | 亚洲一区二区三区四区在线 | 岛国av无码免费无禁网站 | 成人18在线视频播放 | 第四色亚洲色图 | 看片午夜| 91国内揄拍国内精品对白不卡 | 欧美人妻日韩精品 | 国产一级爱片在线播放 | 午夜精品久久久久久99热 | 精品国产午夜肉伦伦影院 | 风韵丰满熟妇啪啪区老老熟妇 | 小明成人永久视频在线观看 | 国产18禁黄网站免费观看 |