关于网站最近出现504错误的总结,too open many files in system

article/2025/11/8 19:02:40

如果你有耐心看完这篇文章,也许会给你带来真正的益处。

网站出现504错误,如果你用阿里云CDN的话还会报

504 Gateway Time-out The gateway did not receive a timely response from the upstream server or application. Powered by Tengine

这样一句错误提示,通过从网络上查询504代码,意思就是网关超时。直接的意思就是无法访问到我们的服务器。网络上的解决办法五花八门,各有各的说话,但是我服务器用的环境登陆啥的都显示正常。

所有只能通过日志去发现问题。于是不懂日志的我,只能在网站频繁出504错误的时候去看网站的日志,通过日志我发现这样一条MYSQL的信息:

too open many files in system。如果你懂英语,很明白这句话是什么意思,就是系统打开的文件数过多。为什么系统会打开文件数过多?其实无论是windows还是linux每运行一个系统都会打开文件,但是并不是我们所说的那个文件的意思,而是叫做文件描述符的东西,或者叫做句柄,这个概念我是第一次碰到,先了解下什么事文件描述符或者句柄。

一般的,在Windows中我们常常叫句柄,而在linux中我们叫文件描述符,因为我网站的环境是linux,那么接下来我会用文件描述符来说。

文件描述符网络上的定义是这样的,是内核通过文件描述符来访问文件。然后不同的描述符可以打开相同的文件。这里很抽象,我是这么理解的,每个人都可能打开这个文件,每个人相当于一个单独的ID,就会给每个人的访问分配一个文件描述符。

然后无论是windows还是linux都有文件描述符的限制,比如linux的句柄有的默认是1024,阿里云ESC默认的文件描述符是65535,但实际上句柄可以调节到很大,可以通过命令:# cat /proc/sys/fs/file-max 进行查看。

上面的句柄或者文件描述符不明白的可以继续自己百度一下,进行详细的了解。

而真正解决问题是从这里开始的,为什么回报too open many files in system?

网上的很多文章都跟我说是因为系统限制的文件描述符太小,需要进行文件描述符的扩大,比如改成655300,等等,但是改了以后呢?随着时间的推移,文件数打开的必定越拉越大,越来越多,这根本不是解决问题最好的方法!那么,还是那个问题,我喜欢刨根问底,为什么会变大?之前为什么没有问题呢?

直到,我了解到mysql的一个关键参数,table_open_ cache,这才是让文件描述符不够的原因所在。来,我们看一下这位大神!

table_open_ cache字面意思就是打开表的高速缓存。来看看英文的解释。作用呢就是每当访问MYSQL的一个表时,如果缓存中有空间,那么就将这个查询缓存放到这个里面,这样可以更快的访问到表的内容。

所以,网络上的各种教程来了,什么根据打开表的数量进行调节,比如MYSQL打开表500个就调节成512甚至是1024,或者说开到2048或者更大!我很是生气没有读过MYSQL英文文档的人说这些话,不过我也没有读过,但是我注意到有人引用了文档中的一句话:If table_open_cache is set too high, MySQL may run out of file descriptors and refuse connections, fail to perform queries, and be very unreliable. 来,复制粘贴-翻译。

如果table_open_cache设置得太高,MySQL可能会用尽文件描述符并拒绝连接,无法执行查询,并且非常不可靠!

也就是说,这个table_open_cache会占用文件描述符!所以说,盲目的加单table_open_cache会占用文件描述符,并且会占用着一直不会释放,直到你给他分配的空间占满为止!

所以,那些说加多大多大的,简直是不负责任!对这个没有了解之前,你怎么可以教别人加大呢?除非他系统确实更改过这个文件描述符,不然以linux来说,65535,不超一天很快会被占满,比如查询网站访问量高半天都不到数据库就会宕掉!所以,英文的描述是:设置的太高,非常不可靠!

所以,我就默默的将这个参数调节到了64M,这是默认的大小,除非你调节了系统的文件描述符或句柄数大小,否则默认我觉得就能解决目前我遇到的问题。

然后通过lsof -n | grep 123 -c 命令可以查看某ID打开句柄大小。123是ID。

那么很多人可能会问了,那没有缓存岂不是慢了?其实我们完全可以调节query_cache_size这个参数的大小来解决,当然我是针对程序而言,毕竟我不是专业的DBA,还需要你去观察数据库运行的状态去适当的调节。以上文章是泰安人才网www.tarczp.com小编遇到的问题解决方法,这也是网络上你绝对搜索不到

CSDN首发,希望可以帮助到用LNMP为环境的人!

在这里还要注明一下,虽然我们可以通过调节table_open_cache的大小来减小这种文件描述符的大小,但是如果调节的很小的话,又会影响什么呢?

调节的过小,势必会影响一直会打开表的操作,要知道频繁打开表的操作会对服务器的性能有一定的影响,比较明显的就是内存和CPU方面,如果你发现CPU经常占满100%或者内存过大,那么这个参数可以根据你当前打开表的最大数量进行调节,比如你的表打开数量为300,那么我们可以设置table_open_cache的大小为512,但是文件描述符的大小肯定会变得更大,超过MYSQL甚至是系统限定的文件描述符,这个时候就需要调节系统的参数。

比如linux可以调节的参数为:

修改配置文件/etc/security/limits.conf,加入:
* soft nofile 655350
* hard nofile 655350

这是我设置的最大的参数,并且设置:

[root@yejr]# sysctl -w fs.file-max=655350
[root@yejr]# sysctl -a | grep fs.file-max
fs.file-max = 655350

可以重启服务器后查看这些参数是否已经改变,否则就设置无效。


http://chatgpt.dhexx.cn/article/Q40w0QmO.shtml

相关文章

腾讯云服务器网站504,使用腾讯、百度云CDN现403和504错误的解决及使用CDN踩的坑...

最近源站出网流量超出带宽的限定值,经常导致服务器丢包。最近有点频繁,甚至一小时丢好几次,如下图所示: 于是考虑接入 CDN ,腾讯云CDN送了300G流量,但是接入后经常打不开页面,就换了百度云CDN。…

出现504怎么办?由于服务器更新导致的博客报504错误[详细记录]

最近由于云服务商进行了云服务优化,更新。由于以前在优化博客时的疏忽与草率,导致了本次服务商那边更新,这边博客直接报错504。 据官方称是修改了DNS解析地址,和ip域名地址。 504错误:代表网关超时 (Gatewa…

nginx实战总结-504错误剖析

一、问题描述 nginx访问会出现504:Gateway Time-out,按照报错的意思是请求无响应或者无响应,意思就是说由于大量的请求,有些线程运气差,一直调用不到,导致请求超时,所以就往超时的时间入手,进行解决 二、解决步骤 先看下nginx使用的是什么协议(proxy/fastcgi):我这…

Git 504错误

网络和代理的问题 1、在环境变量中添加代理 2、设置git的代理为默认 git config --global --unset http.proxy //设置http代理为默认 git config --global --unset https.proxy //设置https代理为默认env | grep proxy //查看代理

php响应码504,php为什么会出现504错误_后端开发

python如何实现excel多表合并(附代码)_后端开发 今天来用python实现合并多个excel为一个工作本,使用不到40行代码完成了60多张excel工作本合并为一张,大家一起来看看吧。 php出现504错误的原因是:1、nginx默认的fastcgi进程响应缓冲区太小了&…

504网关超时怎么解决_什么是504网关超时错误(以及如何解决)?

504网关超时怎么解决 A 504 Gateway Timeout Error happens when a server that was attempting to load a web page did not get a response in time from another server. Almost always, the error is on the website itself, and there’s nothing you can do about it but…

HTTP代理504网关超时错误如何修复?

HTTP状态代码指的是服务器向浏览器指示响应的状态,当服务器充当外部网关或代理并且没有及时收到来自另一个服务器的响应时,则会收到“504–网关超时”。那么,HTTP代理504网关超市错误怎么解决呢? 1、重新加载网页 遇到504网关超时…

鸡啄米:添加控件变量

设置Tab键的顺序:先按CtrlD ,再从自己认为Tab顺序应该为1的控件开始依次单击,随着单击的完成,各控件的Tab响应顺序也按我们的想法设置好了按钮中的代码:UpdateData(TRUE); //将控件中输入的数据传到变量m_a 、 m_b中 …

鸡啄米:C++编程入门系列之一(进制数)

转载自: http://www.jizhuomi.com/software/21.html 鸡啄米在前言已经讲了程序的发展历程,程序设计的进步和编程入门的一些基本概念。这一节主要讲数据在计算机中的存储结构。计算机执行程序需要控制信息和数据信息,控制信息涉及硬件方面&a…

鸡啄米:C++编程入门系列之六(算法的基本控制结构之选择结构)

转载自: http://www.jizhuomi.com/software/34.html 上一讲鸡啄米为大家讲了运算符和表达式的知识,这一讲鸡啄米主要讲算法基本控制结构中的选择结构,同时教大家写比较简单的程序。 为了能写出简单的程序并看见它们的输出效果,鸡…

鸡啄米之VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)

目录 一、目的 1、想学习滚动条控件Scroll Bar,如此获得里面的数值,方便用在其他地方,比只输入变量方便多了 一、参考: 1、VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar) ①…

鸡啄米:C++编程入门系列之前言

转载自: http://www.jizhuomi.com/software/17.html 从今天开始鸡啄米将给大家讲解一些C编程入门的知识,对于鸡啄米也是个温习巩固的过程。鸡啄米将会用深入浅出的方式,尽量用最简单的语言让读者学会C语言,并爱上这门语言。 本前…

鸡啄米:C++编程入门系列之四(数据类型)

转载自: http://www.jizhuomi.com/software/29.html 上一讲鸡啄米给大家讲了VS2010的使用介绍,大家以后就可以用它来进行软件开发了,在编程入门的时候可以写些简单的程序先玩玩,实际编写代码试验下鸡啄米讲过的内容。 C是从C中发…

鸡啄米vc++2010系列30(树形控件Tree Control 下)

前面一节讲了树形控件Tree Control的简介、通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。 树形控件的创建 MFC为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。 树形控…

鸡啄米:C++编程入门系列之五(运算符和表达式)

转载自: http://www.jizhuomi.com/software/32.html 上一讲鸡啄米给大家讲了一些数据类型,这一讲主要讲解编程入门知识-运算符和表达式。运算符,顾名思义,就是用于计算的符号,比如,-,*&#xf…

鸡啄米:C++编程入门系列之三(VS2010的使用介绍)

转载自:http://www.jizhuomi.com/software/27.html 大家好,鸡啄米上节课给大家讲了原码、反码和补码的知识点。这节课我主要跟大家讲解VS2010的使用方法,并不会面面俱到,我只大概讲下经常会用到的功能。至于其他功能用的不会很多…

linux 命令:ls 详解

用法:ls [OPTION]... [FILE]... 打印关于FILE的信息(默认当前目录) 以字母表顺序排序(如果没有使用-cftuvSUX或者--sort等选项)选项(OPTION):-a, --all 不隐藏任何以.…

linux的ls命令没反应,Linux:ls命令如何使用

原标题:Linux:ls命令如何使用 1、ls命令可以在Linux中显示出文件和目录,如下图。当然,ls命令不可能只能实现这么简单的操作,下面就通过一些参数来查看ls的其他用法 2、ls -l,使用长清单模式来列出文件和目录&#xff0…

Linux命令ls -l详细信息说明

一、 概述 Linux系统中敲入命令ls -l可以查看目录或文件的详细信息,本文介绍详细信息的组成。 二、 说明 详细说明见下图: 注意: 链接文件的概念类似于windows里的快捷方式。多个链接文件同时指向一个“源文件”。链接文件分为硬链接或软…

Linux ls 命令学习和简单使用

Linux中隐藏文件的特点是文件名以.开头,跟文件属性无关。Linux中查看隐藏文件用ls -a命令查看 ls 命令 1、ls 不带参数,可以列出当前目录下的内容 2、ls -l 可以列出文件的详细信息 3、 ls -a 可以显示当前目录下的隐藏文件 4、ll 与 ll -al 5、ls…