`
san_yun
  • 浏览: 2638735 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

mysql 大量TIME_WAIT

 
阅读更多
最近发现 mysql经常挂掉,后来看了netstat发现:

[admin@server5 ~]$ netstat -an | grep 3306 | grep 'ESTABLISHED'|wc -l
33
[admin@server5 ~]$ netstat -an | grep 3306 | grep 'TIME_WAIT'|wc -l
1677


登陆到web服务器(linux):
    
     netstat -ae |grep mysql
     tcp        0      0 aaaa:53045               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53044               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53051               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53050               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53049               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53048               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53055               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53054               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53053               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53052               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53059               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53058               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53057               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53056               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53063               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53062               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53061               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53060               192.168.12.3:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53067               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53066               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53065               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53064               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa53071               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53070               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53069               192.168.12.13:mysql           TIME_WAIT   root       0
发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vi /etc/sysctl.conf

编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
 
然后执行 /sbin/sysctl -p 让参数生效。
 
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

net.ipv4.tcp_max_tw_buckets = 1000

修改之后,再用
netstat -ae|grep mysql
tcp        0      0 aaaa:50408               192.168.12.13:mysql           ESTABLISHED nobody     3224651
tcp        0      0 aaaa:50417               192.168.12.13:mysql           ESTABLISHED nobody     3224673
tcp        0      0 aaaa:50419               192.168.12.13:mysql           ESTABLISHED nobody     3224675

       发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,各网站访问正常!!
       以上只是暂时的解决方法,最后仔细巡查发现是前天新上线的一个系统,程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT  
 


kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

net.core.wmem_max=12582912
net.core.rmem_max=12582912
net.ipv4.tcp_rmem= 10240 87380 12582912
net.ipv4.tcp_wmem= 10240 87380 12582912
net.ipv4.tcp_mem=  10240 87380 12582912
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 0
#net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_no_metrics_save = 1
net.core.netdev_max_backlog = 30000
net.core.somaxconn = 30000
net.ipv4.tcp_fin_timeout = 8
net.ipv4.tcp_keepalive_intvl = 20
#net.ipv4.tcp_keepalive_intvl = 11
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_time = 20
#net.ipv4.tcp_keepalive_time = 8
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.ip_local_port_range = 32768 65535
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_max_tw_buckets = 1000

分享到:
评论

相关推荐

    解决mysql出现大量TIME_WAIT

    在IT领域,尤其是在服务器运维与数据库管理中,遇到“大量TIME_WAIT”状态的问题并不罕见,尤其是在高并发场景下,如MySQL服务器。本文将深入解析如何有效解决MySQL出现大量TIME_WAIT状态的问题,通过调整系统内核...

    mysql占用率达到99%

    2. **进一步确认MySQL相关的TIME_WAIT连接**:通过命令`netstat -ae | grep mysql`,我们可以看到更多的TIME_WAIT状态的连接,这表明确实有大量与MySQL相关的连接处于这种状态。这些连接的源端口各不相同,但目标都...

    mysql提示got timeout reading communication packets的解决方法

    错误提示: user: ‘root’ host: `localhost’ (Got timeout reading communication ...wait_timeout 的默认值这:120 根据情况增加吧. 这两个值是一个全局变量,可以动态增加,如: mysql> set global interactiv

    关于MySQL的wait-timeout连接超时问题报错解决方案.pdf

    在 MySQL 中,wait_timeout 参数控制着连接的超时时间,如果设置的过大,可能会导致大量的 SLEEP 进程无法及时释放,拖累系统性能;反之,如果设置的过小,可能会遭遇到“MySQL has gone away”之类的问题。 wait_...

    关于MySQL的wait-timeout连接超时问题报错解决方案.docx

    在 MySQL 中,wait_timeout 参数是控制连接超时的关键参数。当该参数设置的太大时,可能会导致 MySQL 中大量的 SLEEP 进程无法及时释放,拖累系统性能。然而,如果将其设置的太小,可能会遭遇到“MySQL has gone ...

    解决SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded_runtimeerror怎么修复

    2. **调整锁等待超时时间**:通过设置`innodb_lock_wait_timeout`参数来增加等待超时时间。但请注意,这仅是权宜之计,不是根本解决方案。 3. **监控和分析**:使用`SHOW ENGINE INNODB STATUS;`命令查看当前的锁...

    快速定位MSSQL占用CPU高的sql方法

    1. 登录到SQL Server Management Studio (SSMS),右键点击数据库实例,选择“活动和监视器”,然后打开“最近耗费大量资源的查询”。这个视图会按照CPU时间排序,展示消耗CPU最多的查询。 2. 在列表中找到耗时最长的...

    MySQL和连接相关的timeout 的详细整理

    `wait_timeout`和`interactive_timeout`则是关于连接空闲时的超时设置。`wait_timeout`用于非交互式连接,即不进行任何查询操作的连接,如果在指定时间内没有活动,服务器将自动关闭连接。而`interactive_timeout`是...

    linux+tomcat+mysql+solr调优

    该选项可以减少TIME_WAIT sockets的数量,从而降低系统的内存使用。 - `net.ipv4.tcp_fin_timeout`:设置TIME_WAIT socket的最大存活时间。根据具体的应用场景调整该值,以减少TIME_WAIT状态的socket数量。 ##### ...

    mysql_my.ini_优化

    10. **wait_timeout**:连接在无活动后自动关闭的等待时间。可以根据业务需求调整,例如从28800秒改为7200秒。 优化MySQL配置时,必须考虑到服务器的硬件资源,特别是内存。调整参数后,务必通过重启MySQL服务来...

    mysql配置文件常用修改.pdf

    innodb_lock_wait_timeout = 50 ``` 这些设置用于控制InnoDB引擎的各个方面,例如数据文件的位置、缓存池大小以及日志文件的大小。你可以通过`show engines;`和`show create table t1;`查看默认存储引擎和其他表的...

    mysql_配置详细说明.docx

    17. **wait_timeout**:定义了非交互连接在无活动后自动断开的时间。 18. **innodb_buffer_pool_size**:InnoDB存储引擎的缓存池大小,对InnoDB表的性能至关重要。 19. **query_cache_size**:查询缓存的大小,...

    centos_mysql

    - `net.ipv4.tcp_tw_reuse` 和 `net.ipv4.tcp_tw_recycle`: 分别开启TIME_WAIT套接字的重用,加速连接关闭和回收。 2. **内存管理参数**: - `kernel.shmmax`: 定义了单个共享内存段的最大值,对于InnoDB存储引擎...

    Mysql使用技巧心得

    - `wait_timeout`:非交互式连接的超时时间,默认为8小时。 - `interactive_timeout`:交互式连接的超时时间,默认为28800秒。 9. **自定义命令行提示符** 对于经常使用MySQL命令行工具的人来说,自定义命令行...

    mysql数据库my.cnf配置文件

    innodb_lock_wait_timeout = 120 # InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒 bulk_insert...

    比较全面的MySQL优化参考.pdf

    设置vm.dirty_background_ratio和vm.dirty_ratio以确保数据持续刷新到磁盘,以及设置net.ipv4.tcp_tw_recycle和net.ipv4.tcp_tw_reuse以减少TIME_WAIT状态和提高TCP协议效率。 在MySQL层相关优化中,数据库版本选择...

    mysql支持事务配置,配置InnoDB引擎

    - **第16行**: `innodb_lock_wait_timeout=50` - 设置事务等待锁的超时时间。如果在此时间内未获得锁,则事务回滚。默认值为50秒。 - **第17行**: `innodb_log_files_in_group=3` - 设置日志组中日志文件的数量...

    多实例mysql的安装和管理_wing.docx

    - **innodb_lock_wait_timeout=120**:等待锁定的时间超时值,过大会增加死锁的风险,过小则可能导致更多重试。 #### 三、管理多实例MySQL - **监控与维护**: - 使用MySQL自带工具如`SHOW STATUS`和`SHOW ...

Global site tag (gtag.js) - Google Analytics