热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于网站最近出现504错误的总结,tooopenmanyfilesinsystem

如果你有耐心看完这篇文章,也许会给你带来真正的益处。网站出现504错误,如果你用阿里云CDN的话还会报504GatewayTime-outThega

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

网站出现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

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


推荐阅读
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
  • web页面报表js下载,web报表软件 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • 探讨低代码行业发展现状,分析其未能催生大型企业的原因,包括市场需求、技术局限及商业模型等方面。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细解析了NYOJ20 - 吝啬的国度问题,通过图的深度优先搜索(DFS)算法解决路径查询问题。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
author-avatar
瑶瑶2502863511
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有