[关闭]
@zhongdao 2019-05-04T11:17:17.000000Z 字数 1449 阅读 1690

高并发socket系统优化

未分类


io 限制

文件描述符与socket连接

在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。
文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作(包括网络socket操作)的系统调用都通过文件描述符。

这个FD就是File Discriptor 中文翻译为文件描述符。

Socket起源于unix,Unix中把所有的资源都看作是文件,包括设备,比如网卡、打印机等等,所以,针对Socket通信,我们在使用网卡,网卡又处理N多链接,每个链接都需要一个对应的描述,也就是惟一的ID,即对应的文件描述符。简单点说也就是 int fd = socket(AF_INET,SOCK_STREAM, 0); 函数socket()返回的就是这个描述符。在传输中我们都要使用这个惟一的ID来确定要往哪个链接上传输数据。

每个进程开启一个soeket连接,都会占用一个文件描述符。

linux 系统限制

  1. #ulimit -a
  2. core file size (blocks, -c) 0
  3. data seg size (kbytes, -d) unlimited
  4. scheduling priority (-e) 0
  5. file size (blocks, -f) unlimited
  6. pending signals (-i) 63562
  7. max locked memory (kbytes, -l) 64
  8. max memory size (kbytes, -m) unlimited
  9. open files (-n) 1024
  10. pipe size (512 bytes, -p) 8
  11. POSIX message queues (bytes, -q) 819200
  12. real-time priority (-r) 0
  13. stack size (kbytes, -s) 8192
  14. cpu time (seconds, -t) unlimited
  15. max user processes (-u) 63562
  16. virtual memory (kbytes, -v) unlimited
  17. file locks (-x) unlimited

这里重点关注open files和max user processes。分别表示:单个进程打开的最大文件数;系统可以申请最大的进程数。

  1. # ulimit -n
  2. 1024

http说明

image_1d9oni5bs6tj1ov414g353a1qdn9.png-345.8kB

HTTP 协议的通信过程:
image_1d9onkskg2vq10mnj0recp1alem.png-237.7kB

参考资料

文件描述符与socket连接
https://www.cnblogs.com/DengGao/p/file_symbol.html

Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
https://www.cnblogs.com/yinz/p/5057224.html

linux系统高并发socket最大连接数优化
https://segmentfault.com/a/1190000007959713

一篇搞懂TCP、HTTP、Socket、Socket连接池
https://segmentfault.com/a/1190000014044351

Linux操作系统内核参数优化
https://segmentfault.com/a/1190000002488707

Socket编程基础——面向连接TCP
https://segmentfault.com/a/1190000000628243

图解HTTP——总结
https://segmentfault.com/a/1190000014572024

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注