阿里P8面试官:如何设计一个扛住千万级并发的架构?( 三 )


我们可以通过下面这条命令来查看一个进程可以打开的文件数量
ulimit -a 或者 ulimit -nopen files (-n) 1024 是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量)
这里只是对用户级别的限制,其实还有个是对系统的总限制,查看系统总线制:
cat /proc/sys/fs/file-maxfile-max是设置系统所有进程一共可以打开的文件数量。同时一些程序可以通过setrlimit调用,设置每个进程的限制 。如果得到大量使用完文件句柄的错误信息,是应该增加这个值 。
当出现上述异常时,我们可以通过下面的方式来进行修改(针对单个进程的打开数量限制)
vi /etc/security/limits.confroot soft nofile 65535root hard nofile 65535* soft nofile 65535* hard nofile 65535

  • *代表所有用户、root表示root用户 。
  • noproc 表示最大进程数量
  • nofile代表最大文件打开数量 。
  • soft/hard,前者当达到阈值时,制作警告,后者会报错 。
另外还要注意,要确保针对进程级别的文件打开数量反问是小于或者等于系统的总限制,否则,我们需要修改系统的总限制 。
vi /proc/sys/fs/file-maxTCP连接对于系统资源最大的开销就是内存 。
因为tcp连接归根结底需要双方接收和发送数据,那么就需要一个读缓冲区和写缓冲区,这两个buffer在linux下最小为4096字节,可通过cat /proc/sys/net/ipv4/tcp_rmem和cat /proc/sys/net/ipv4/tcp_wmem来查看 。
所以,一个tcp连接最小占用内存为4096+4096 = 8k,那么对于一个8G内存的机器,在不考虑其他限制下,最多支持的并发量为:8


推荐阅读