1、数据库中的锁?

  • xxxx
  • xxx
  • xzzzzzzz

Mysql哪儿使用了乐观锁机制…

2、三次握手异常 && 四次挥手异常
https://blog.csdn.net/weixin_39406430/article/details/119900938
https://mp.weixin.qq.com/s/3rM_RlwejkMFWm0GdwK6Hg

  • 第一次握手失败:
    • 客户端触发超时重传 SYN
  • 第二次握手失败:
    • 双方均会触发重传
  • 第三次握手失败:
    • 服务端超时重传SYN+ACK

  • 第一次挥手
    • 如果第一次挥手丢失了,那客户端迟迟收不到服务端的ack报文,也会触发超时重传机制,重传FIN报文,当重传次数达到一定次数的时候,就不在发送FIN报文,直接进入close状态
  • 第二次挥手
    • 当服务器收到客户端的第一次挥手后,就会发送给服务端一个ACK报文,此时服务端进入CLOSE_WAIT状态,前面我们也强调过,ACK报文是不会重传的,所以会触发客户端的超时重传机制。
    • 客户端一直重传?

  • 第三次挥手
    • 服务端处于CLOSE_WAIT状态时,调用close函数,内核就会发出FIN报文,同时连接进入LAST_ACK状态,等待客户端返回ack报文来确认关闭连接。如果迟迟收不到这个ack,服务端就会重发FIN报文。
  • 第四次挥手
    • 触发服务端的超时重传机制重传FIN报文。

总结一下:一二次 客户端重传 三四次 服务器重传

为什么要有三次握手

  • 如果只有两次,已经失效的请求连接报文在服务端建立起正常连接
  • 同步序列号

3、close() && shutdown()

4、fork() 父子进程共有什么?

  1. https://subingwen.cn/linux/process/#2-2-fork-%E5%89%96%E6%9E%90
  2. COPY ON WRITE
  3. fork()和vfork()

5、close_wait() 和 time_wait() 怎么处理?

time_wait:
TIME_WAIT是主动关闭连接的一方保持的状态,对于爬虫服务器来说他本身就是“客户端”,在完成一个爬取任务之后,他就会发起主动关闭连接,从而进入TIME_WAIT的状态,然后在保持这个状态2MSL(max segment lifetime)时间之后,彻底关闭回收资源。
那么,如果你用一台机器做压测的客户端,你一分钟能发送多少并发连接请求?如果这台是一个负载均衡服务器,一台负载均衡服务器,一分钟可以有多少个连接同时访问后端的服务器呢?所以大量TIME_WAIT会影响服务器网络性能
问题
1)占用连接
处于TIME-WAIT状态的TCP连接,在链接表槽中存活1分钟,意味着另一个相同四元组(源地址,源端口,目标地址,目标端口)的连接不能出现,也就是说新的TCP(相同四元组)连接无法建立。
再次回想一下前面的问题,如果一条连接,即使在四次握手关闭了,由于TIME_WAIT的存在,这个连接,在1分钟之内,也无法再次被复用,那么,如果你用一台机器做压测的客户端,你一分钟能发送多少并发连接请求?如果这台是一个负载均衡服务器,一台负载均衡服务器,一分钟可以有多少个连接同时访问后端的服务器呢?所以大量TIME_WAIT会影响服务器网络性能。
端口复用???
2)占用内存
一条Socket处于TIME_WAIT状态,它也是一条“存在”的socket,内核里也需要有保持它的数据:
3)占用内存CPU
当然!每次找到一个随机端口,还是需要遍历一遍bound ports的吧,这必然需要一些CPU时间。
解决办法
1)服务器能够快速回收和重用那些TIME_WAIT的资源。
2)设置套接字属性recycle
3)长连接
4)端口复用
5)服务器不主动关闭连接
6)https://mp.weixin.qq.com/s/3rM_RlwejkMFWm0GdwK6Hg

CLOSE_WAIT【代码错误】

1)忘记调用close()
2)fork进程时 子进程复制了父进程的文件描述符号,处理时只有子进程调用close()函数…引用计数未变为0