启用内核参数tcp_tw_recycle时删除连接

时间:2017-06-29 04:49:23

标签: php mysql symfony

我们的API每分钟有600个访问权限,API设置使用两个专用服务器,一个用于php进程,第二个用于mariadb。我们正在使用14个核心,128个RAM服务器。

api和数据库服务器之间的通信是通过本地网络进行的,当对api有大量访问时,我们注意到两个错误,一个是关于api larvel日志,另一个是关于mysql服务器端。

  

production.ERROR:   Symfony \ Component \ Debug \ Exception \ FatalErrorException:Maximum   执行时间超过60秒

     

[警告]中止连接48520867到db:'database-name'用户:   'root'主机:'172.16.1.2'(读取通信包时超时)

我们设法通过进行两次更改来修复api错误,php max_execution_time为120秒并设置内核参数net.ipv4.tcp_tw_recycle = 1,

一旦完成此操作,我们现在面临来自我们的Office ISP的连接丢弃和专用IP地址,我们有超过100个用户从相同的IP连接。

一旦内核参数“net.ipv4.tcp_tw_recycle = 1”被禁用,我们的办公室IP就可以很酷地访问它了。我们已经有了“net.ipv4.tcp_tw_reuse = 1”。

这些可能的解决方案是什么?我还可以看到一个与同一问题几乎相似的stackoverflow讨论。但仍然无法找到相同的解决方案。

Dropping of connections with tcp_tw_recycle

2 个答案:

答案 0 :(得分:0)

我认为问题是由于PHP和Maria DB之间的连接数量增加而产生的。

请增加Apache可以处理的请求数,并增加Maria DB的缓冲区内存大小。

在Mysql中我们可以增加下面提到的参数(直到现在还没有使用Maria DB)

/etc/my.cnf
***innodb_buffer_pool_size = 384M***
key_buffer = 256M
query_cache_size = 1M
query_cache_limit = 128M
thread_cache_size = 8
***max_connections = 400***
innodb_lock_wait_timeout = 100

请试试。

答案 1 :(得分:0)

设置" net.ipv4.tcp_tw_recycle = 0"完全修复了连接的丢失。工作得很好。我们可以使用下面的命令将net.ipv4.tcp_tw_recycle设置为0。

  

sysctl -w net.ipv4.tcp_tw_recycle = 0

参考讨论: -

tcp_tw_reuse vs tcp_tw_recycle : Which to use (or both)?

https://serverfault.com/questions/234534/is-it-dangerous-to-change-the-value-of-proc-sys-net-ipv4-tcp-tw-reuse