概述
系统: 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连接断开无法登陆。
[root@server-mysql fs]# ulimit -n unlimited
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[root@server-mysql fs]#
[root@server-mysql fs]# ulimit -n 1048576
[root@server-mysql fs]# ulimit -n 1048577
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[root@server-mysql fs]# cat /proc/sys/fs/nr_open
1048576
[root@server-mysql fs]# echo 1000000 > /proc/sys/fs/nr_open
[root@server-mysql fs]# cat /proc/sys/fs/nr_open
1000000
[root@server-mysql fs]# ulimit -n 999999
[root@server-mysql fs]# ulimit -n 1000000
[root@server-mysql fs]# ulimit -n 1000001
-bash: ulimit: open files: cannot modify limit: Operation not permitted
?
[root@server-mysql fs]# cat file-nr
2496 0 132022
[root@server-mysql fs]# cat file-max
132022
[root@server-mysql fs]# echo 2000000 >file-max
[root@server-mysql fs]# cat file-nr
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参数,解决连接无法继续连接的问题。
[root@dzpj-server19 net]# pwd
/proc/sys/net
[root@dzpj-server19 net]# ls
core ipv4 ipv6 netfilter nf_conntrack_max unix
[root@dzpj-server19 net]# cd ipv4/
[root@dzpj-server19 ipv4]# ls
cipso_cache_bucket_size ip_early_demux tcp_autocorking tcp_max_orphans tcp_stdurg
cipso_cache_enable ip_forward tcp_available_congestion_control tcp_max_ssthresh tcp_synack_retries
cipso_rbm_optfmt ip_forward_use_pmtu tcp_base_mss tcp_max_syn_backlog tcp_syncookies
cipso_rbm_strictvalid ipfrag_high_thresh tcp_challenge_ack_limit tcp_max_tw_buckets tcp_syn_retries
conf ipfrag_low_thresh tcp_congestion_control tcp_mem tcp_thin_dupack
icmp_echo_ignore_all ipfrag_max_dist tcp_dsack tcp_min_tso_segs tcp_thin_linear_timeouts
icmp_echo_ignore_broadcasts ipfrag_secret_interval tcp_early_retrans tcp_moderate_rcvbuf tcp_timestamps
icmp_errors_use_inbound_ifaddr ipfrag_time tcp_ecn tcp_mtu_probing tcp_tso_win_divisor
icmp_ignore_bogus_error_responses ip_local_port_range tcp_fack tcp_no_metrics_save tcp_tw_recycle
icmp_ratelimit ip_local_reserved_ports tcp_fastopen tcp_notsent_lowat tcp_tw_reuse
icmp_ratemask ip_nonlocal_bind tcp_fastopen_key tcp_orphan_retries tcp_window_scaling
igmp_max_memberships ip_no_pmtu_disc tcp_fin_timeout tcp_reordering tcp_wmem
igmp_max_msf neigh tcp_frto tcp_retrans_collapse tcp_workaround_signed_windows
igmp_qrv ping_group_range tcp_invalid_ratelimit tcp_retries1 udp_mem
inet_peer_maxttl route tcp_keepalive_intvl tcp_retries2 udp_rmem_min
inet_peer_minttl tcp_abort_on_overflow tcp_keepalive_probes tcp_rfc1337 udp_wmem_min
inet_peer_threshold tcp_adv_win_scale tcp_keepalive_time tcp_rmem xfrm4_gc_thresh
ip_default_ttl tcp_allowed_congestion_control tcp_limit_output_bytes tcp_sack
ip_dynaddr tcp_app_win tcp_low_latency tcp_slow_start_after_idle
[root@dzpj-server19 ipv4]#
参考:内核优化 之 Linux下高并发socket最大连接数所受的各种限制(详解)
持续更新中。
最后
以上就是笨笨信封为你收集整理的Linux的TCP连接问题解决调优观察的全部内容,希望文章能够帮你解决Linux的TCP连接问题解决调优观察所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复