前提:两台不同的服务器,系统配置相同,部署了两个相同的简单java服务(只打印一句话,以及为了看是否请求均分而计数操作),服务配置相同
测试:客户端工具jmeter
现象:A服务器不会报错,B服务器一段时间后报错:
2021-01-08 14:58:18.179 ERROR [http-nio-8001-Acceptor] org.apache.tomcat.util.net.Acceptor [175] : Socket accept failed
java.io.IOException: Too many open files
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:421)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:249)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:463)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:73)
at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95)
at java.lang.Thread.run(Thread.java:748)
溯因:lsof -p 查看文件打开数,A服务器的打开文件数几乎不变,不报错;B服务器的打开文件数一直会上升,直到报错
猜测:A服务器的CPU是4核 Intel® Core™ i5-4590 CPU @ 3.30GHz,B服务器的CPU是4核Intel® Celeron® CPU J1900 @ 1.99GHz,B服务器性能太差,导致处理请求的速度慢于接收连接的速度
结论: