linux内核 io基础
lsof -p 文件描述符
netstat -natp -tunlp
tcpdump -nn -i eth0 port 9090
三次握手 客户端发起sync(seq) 服务端返回sync ack(=seq+1) 客户端返回sync ack(=1)
socket四元组在内存资源足够的时候只要唯一就能创建连接成功
CIP_CPORT+SIP_SPORT : FD1
mtu max transmit unit/mss max segment size
https://blog.youkuaiyun.com/itworld123/article/details/102994694
nc命令
nc ip port
发送很多以后超出s-rec队列的数据会被丢弃
阻塞的问题如何解决
nodelay 默认false delay优化的结果实际上会先发
oob 参数 会先发一个字符 ok才会将剩余的发送出去delay优化模式下会一口气将剩下的都发出去
keepalive在tcp层会时不时发送ack给对方看是否存活,避免三次握手之后分配了资源却不说话
lsof -p $$ (lsof : list open file)
追踪进程的线程情况
strace -ff -o out /usr/j2sdk1.4/bin/java TestSocket
man tcp
man bash
man utf-8/ascii/7 ip/ip
man man
man 2 socket
socket=fd3 bind(fd3,9=8090) listen(fd3) -> netstat -natp 0.0.0.0:8090 0.0.0.0.* LISTEN
accept(fd3, >>fd5/blocking
clone recv(
bio的方式就是多线程模型
有一个线程专门接受accept fd3 (accept(fd3, >>fd5/blocking)
来一个新的客户端就开启一个线程(clone recv(fd5(fd6、fd7来一个就会增加一个文件描述符)->/blocking)
测试服务器客户端创建超过65535个请求出去的方法:在原网卡子端口下设置一个ip
能保证四元组不同就可以了
ifconfig eth0:11 192.168.160.11/24
kegel.com/c10k.html
route -n
route add -host 192.168.110.100 gw 192.168.1.2(直接发给windows这台机器)
因为如果按默认的发到
ulimit -a
ulimit -SHn 500000
ulimit -n
1024对非root用户生效,root用户有特权,限制对root来说虚设
cat /proc/sys/fs/file-max
385900 38万 kernal级别估算4g内存可以生成最多有38万左右的描述符
/etc/security/limits.conf
yum install man-pages man