https://www.gravatar.com/avatar/dfba7b9af4258f14b883b676b32bf3db?s=240&d=mp

爱宝儿

游戏开发及物联网大数据集群维护及部署开发,数据存储及相关设计,大数据、ETL、Flink、kafka,hadoop框架等多种技术开>发技术。涵盖语言涉及Java、Go、Python、C、C#等。

仅供学习参考

netty程序出现:Too Many open files问题

../../images/weixin_public.png

场景: 本地从kafka获取数据,模拟设备,通过808协议给第三方平台发送数据,一个设备一个连接。 问题: 使用netty做性能测试时,并发过大造成Too Many open files问题 每个设备对象,内部就一个netty对象请求,结果1000多个设备,使用服务器句柄达到了17w+,

Java多线程:Linux多路复用,Java NIO与Netty简述

../../images/weixin_public.png

JVM的多路复用器实现原理

  • Linux 2.5以前:select/poll
  • Linux 2.6以后: epoll
  • Windows: IOCP
  • Free BSD, OS X: kqueue

下面仅讲解Linux的多路复用。

Linux中的IO

Linux的IO将所有外部设备都看作文件来操作,与外部设备的操作都可以看做文件操作,其读写都使用内核提供的系统调用,内核会返回一个文件描述符(fd, file descriptor),例如socket读写使用socketfd。描述符是一个索引,指向内核中一个结构体,应用程序对文件的读写通过描述符完成。