监听9090端口下的tcp网络包传输tcpdump -nn -i eth0 port 9090
lsof -p pid
查看进程号下的进程信息
netstat -natp
查看端口连接情况
将服务端启动起来之后,如果有客户端和服务端建立三次握手连接,但是在client.accept()接收之前,socket没有分配给谁使用,是没有被人接收的,如下图1。此时如果客户端发送了数据,服务端也没有分配给具体程序,但是在内核中会记录下来信息,如图2。此时若clien.accept()执行后,则会分配一个文件描述符去对应该socket,那么也会将数据读取到程序中来。 注意:tcp机制,如果服务端程序一直没有accept,但是客户端又不停的收数据,那么收到一定的数量,服务端socket就不会接收了,此时程序再accept时就会造成数据丢失,只能拿到前面存储的数据。
图1
图2
tcp的三次握手是内核级的,即使不调用accept。socket是四元组。SIP SPORT + CIP CPORT
strace -ff -o out cmd
监视程序所有线程的内核调用情况
ulimit -a
查看文件描述符数量,包括其他的一些配置ulimit -n
查看文件描述符数量ulimit -SHn 50000
将文件描述符数量设置为50000
为啥ulimit -n 1024
但是连接数超过了1024
有时在root用户下发现文件描述符设置为1024,但是实际连接数量却可以超过,因为root用户可以调起一些使用,如果是普通用户,就会被限制