几个网络相关的问题
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 层。
6 tcp 滑动窗口是什么
滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的
7 为什么有网卡中断
可以认为是“唤醒” CPU 处理网卡数据,否则网卡缓存会溢出,导致丢弃数据。
还有一种 DMA 的方式。
8 bio 有什么好处,什么地方用 bio
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。