几个网络相关的问题

1 一台机器最多支持多少 tcp 连接

首先,一个连接的组成是 【local ip, local port, remote ip, remote port】,作为服务端 ,前两者是不变的。

那么一个端口,ipv4地址,2的32 次方 * 端口数(2 的 16 次方)= 2的48 次方

另外,还需要修改文件句柄大小。ulimit 是一个进程的句柄大小。默认 1024.

2 连接数过多会带来什么影响

连接数过多之tcp回收问题 time wait,即服务端主动关闭连接。

可修改 vi /etc/sysctl.conf 文件,修改 timeout,socket 回收,重用 tcp,开启 syn cookies。 4 个方式。

3 cpu0 显示繁忙

软中断过高,而且大部分都集中在同一个CPU。

用软件处理,有 RPS,通过对流的 hash,负载到不同的 cpu,问题是不能够很好的让 进程的 cpu 和处理中断的 cpu 是同一个 cpu,导致 cache miss。为了解决这个问题,linux 后来的版本,有个 RFS 的方案,防止 cache miss。但是据说还是不太好用。

购买支持多队列的网卡硬件,可以彻底解决 软中断集中在单个 cpu0 的问题(看版本)。

从这个话题换个角度说:当你的网卡没有打满,cpu 满载了,除了用 pidstat 看看是不是程序问题,或者 cs 问题,还可以看看是不是 cpu0 软中断太多导致的。

4 time wait 和 close wait 区别

time wait 是主动关闭,这个是为了确保旧连接的数据对新连接的影响。通常是 2msl。而且资源会被占用。

解决办法,1 尽量不要主动断开连接。

2 另外,关闭 socket 的 linger 选项。

close wait 对方关闭。此时,我们需要再调一次 close 来主动关闭。

5 写文件经历几层 cache

普通调用:1 层,如果是 DIO,则是 0 层。

image.png

6 tcp 滑动窗口是什么

滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的

7 为什么有网卡中断

可以认为是“唤醒” CPU 处理网卡数据,否则网卡缓存会溢出,导致丢弃数据。

还有一种 DMA 的方式。

8 bio 有什么好处,什么地方用 bio

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。


几个网络相关的问题
http://thinkinjava.cn/2019/06/06/2019/06-06-io-qa/
作者
莫那·鲁道
发布于
2019年6月6日
许可协议