• Linux的TCP连接问题解决调优观察


    系统: centos7.3

    遇到问题:

    1、open so many files

    解:

            当tcp连接数过多的时候,可能会提示open so many files。针对用户打开最大文件数的限制, 在limits.conf对应的nofile,不管是man手册还是文件中说明都只是一句话“maximum number of open files",它其实对应是单个进程能打开的最大文件数,通常为了省事,我们想取消它的限制,根据man手册中,“values -1, unlimited or infinity indicating no limit”,-1、unlimited、infinity都是表明不做限制,可是当你实际给nofile设置成这个值,等你重启就会发现无法登录系统了。由此可见,nofile是有一个上限的,同时用ulimit测试:

    ulimit其实就是对单一程序的限制,进程级别的

    file-max是所有时程最大的文件数

    nr_open是单个进程可分配的最大文件数

            所以在修改/etc/security/limits.conf的时候要注意,考虑上面三个值的大小,一旦nofile值超过nr_open,则可能ssh连接断开无法登陆。

    1. [root@server-mysql fs]# ulimit -n unlimited
    2. -bash: ulimit: open files: cannot modify limit: Operation not permitted
    3. [root@server-mysql fs]#
    4. [root@server-mysql fs]# ulimit -n 1048576
    5. [root@server-mysql fs]# ulimit -n 1048577
    6. -bash: ulimit: open files: cannot modify limit: Operation not permitted
    7. [root@server-mysql fs]# cat /proc/sys/fs/nr_open
    8. 1048576
    9. [root@server-mysql fs]# echo 1000000 > /proc/sys/fs/nr_open
    10. [root@server-mysql fs]# cat /proc/sys/fs/nr_open
    11. 1000000
    12. [root@server-mysql fs]# ulimit -n 999999
    13. [root@server-mysql fs]# ulimit -n 1000000
    14. [root@server-mysql fs]# ulimit -n 1000001
    15. -bash: ulimit: open files: cannot modify limit: Operation not permitted
    16. ?
    17. [root@server-mysql fs]# cat file-nr
    18. 2496 0 132022
    19. [root@server-mysql fs]# cat file-max
    20. 132022
    21. [root@server-mysql fs]# echo 2000000 >file-max
    22. [root@server-mysql fs]# cat file-nr
    23. 2496 0 2000000

    参考博客:Linux下设置最大文件打开数nofile及nr_open、file-max

            解决完open so many files问题后,当tcp连接在内存足够的情况下达到一定量级后就会稳定在同一个连接数。后面的连接则会连接超时,这个时候就需要对系统参数进行优化。优化可以从两个方面考虑:

     

     

     参考:linux中高并发socket最大连接数的优化详解

            但是实际在修改的时候发现net.ipv4.ip_conntrack_max不存在,但是存在nf_conntrack_max。可以在/etc/sysctl.conf修改net.nf_conntrack_max = 131070参数,解决连接无法继续连接的问题。

    1. [root@dzpj-server19 net]# pwd
    2. /proc/sys/net
    3. [root@dzpj-server19 net]# ls
    4. core ipv4 ipv6 netfilter nf_conntrack_max unix
    5. [root@dzpj-server19 net]# cd ipv4/
    6. [root@dzpj-server19 ipv4]# ls
    7. cipso_cache_bucket_size ip_early_demux tcp_autocorking tcp_max_orphans tcp_stdurg
    8. cipso_cache_enable ip_forward tcp_available_congestion_control tcp_max_ssthresh tcp_synack_retries
    9. cipso_rbm_optfmt ip_forward_use_pmtu tcp_base_mss tcp_max_syn_backlog tcp_syncookies
    10. cipso_rbm_strictvalid ipfrag_high_thresh tcp_challenge_ack_limit tcp_max_tw_buckets tcp_syn_retries
    11. conf ipfrag_low_thresh tcp_congestion_control tcp_mem tcp_thin_dupack
    12. icmp_echo_ignore_all ipfrag_max_dist tcp_dsack tcp_min_tso_segs tcp_thin_linear_timeouts
    13. icmp_echo_ignore_broadcasts ipfrag_secret_interval tcp_early_retrans tcp_moderate_rcvbuf tcp_timestamps
    14. icmp_errors_use_inbound_ifaddr ipfrag_time tcp_ecn tcp_mtu_probing tcp_tso_win_divisor
    15. icmp_ignore_bogus_error_responses ip_local_port_range tcp_fack tcp_no_metrics_save tcp_tw_recycle
    16. icmp_ratelimit ip_local_reserved_ports tcp_fastopen tcp_notsent_lowat tcp_tw_reuse
    17. icmp_ratemask ip_nonlocal_bind tcp_fastopen_key tcp_orphan_retries tcp_window_scaling
    18. igmp_max_memberships ip_no_pmtu_disc tcp_fin_timeout tcp_reordering tcp_wmem
    19. igmp_max_msf neigh tcp_frto tcp_retrans_collapse tcp_workaround_signed_windows
    20. igmp_qrv ping_group_range tcp_invalid_ratelimit tcp_retries1 udp_mem
    21. inet_peer_maxttl route tcp_keepalive_intvl tcp_retries2 udp_rmem_min
    22. inet_peer_minttl tcp_abort_on_overflow tcp_keepalive_probes tcp_rfc1337 udp_wmem_min
    23. inet_peer_threshold tcp_adv_win_scale tcp_keepalive_time tcp_rmem xfrm4_gc_thresh
    24. ip_default_ttl tcp_allowed_congestion_control tcp_limit_output_bytes tcp_sack
    25. ip_dynaddr tcp_app_win tcp_low_latency tcp_slow_start_after_idle
    26. [root@dzpj-server19 ipv4]#

    参考:内核优化 之 Linux下高并发socket最大连接数所受的各种限制(详解)


    持续更新中。

  • 相关阅读:
    【软件工具】百度搜索技巧
    深度系统(Deepin)开机无法登录,提示等待一千五百分钟
    ClickHouse安装完整使用 第二章
    CASIO虚线替换部分及切线支距法
    学习Java的第六天
    【OPC UA】基于OpcUaFx的OPC客户端读写KEPServerEx6服务器节点
    Mysql集群及高可用-Gtid模式2
    vue项目axios的使用实例详解
    2020年计算机能力挑战赛C/C++初赛题解
    算法——双指针
  • 原文地址:https://blog.csdn.net/wngpenghao/article/details/127766360