扬州城市论坛 百科 服务器500错误原因(服务器请求失败的原因)

服务器500错误原因(服务器请求失败的原因)

没有任何经验,学习如何扩展一个网站是相当困难的。现在假设你有很多像highscalability.com这样的网站,你需要一些好的解决方案来扩展它们,但是世界上没有“灵丹妙药”,也没有解决方案可以满足所有网站的需求。你得自己动手,不断思考,找到能满足你需求的解决方案。我就是这么做的。

几年前,我的老板找到我说,“我们有一个新项目,想让你做。主要是一个网站的重建。一个月之内,这个网站已经有了100万用户。你必须重建这个网站,以确保我们能够应对未来不断增长的用户数量。”我已经是一个有经验的程序员了,但是我不擅长这些方面,所以我要开始学习如何扩展一个网站——。整个过程历尽艰辛。(相关文章推荐:重构:“为什么”和“如何”)

这个网站的后台软件是一个php内容管理系统,基于Smarty和mysql。首要任务是找到合适的托管公司,需要有丰富的经验,能为我们管理服务器。经过一番调查研究,我们找到了这样一家公司,然后跟他们说了我们的需求。他们为我们推荐的配置如下:

负载平衡器(后备)

2台网络服务器

MySQL服务器(后备)

掘进机

他们说,这就是我们所需要的。——我们对此深信不疑。我们得到的最终配置是:

负载平衡器(单核,1GB内存,磅)

两台Web服务器(双核、4GB内存、Apache)

MySQL服务器(四核,8GB内存)

开发机器(单核,1GB内存)

这个配置非常基础,没有进一步优化。为了同步文件(PHP和媒体文件),他们建立了一个主动-主动DRBD。最后,重构开始了——。当然,我们很兴奋。一大早,我们把域名切换到新的IP,运行我们的监控脚本,然后盯着屏幕。我们马上看到了这些机器上的流量,一切似乎都运行良好。页面加载很快,MySQL承担了大量的查询任务,我们所有人都很开心。

然后,突然,我们的电话开始响起:“我们无法访问您的网站。怎么了?”我们看一下我们的监控软件,确实是——服务器被冻结了,站点离线了!当然,我们做的第一件事就是给我们的主机服务提供商打电话:“我们所有的服务器都崩溃了。这是怎么回事?”他们答应检查机器,过一会儿再打来。这个电话来了:“你的系统根本无法干预。你做了什么?完全搞砸了。”他们停止了负载平衡器,并让我观察其中一个Web服务器。当我看到index.php的文件时,我感到震惊。它包含一些奇怪的C代码片段、错误消息和一些看起来像日志文件的东西。经过进一步调查,我们发现是DRBD造成了这次事故。

“杀死”您的服务器的方法之一

把Smarty编译器和模板缓存放在一个高负载的主动-主动DRBD集群上,你的服务器就会挂掉!当我们的托管服务提供商修复Web服务器时,我重写了一些CMS代码,以便在这些服务器的本地文件系统上存储Smarty缓存文件。我们又上线了!

现在是下午。这个网站通常在下午晚些时候到晚上达到高峰。晚上,几乎没有车流量。我们一直盯着监控软件,所有人都异常紧张。这个网站可以加载,但是后来系统负载越高,响应越慢。我增加了Smarty模板缓存的生命周期,希望它能产生3354的效果,但不幸的是,它没有!很快,服务器开始给出超时提示、空白页和错误信息。两台机器承受不了这么大的负荷。

我们的客户这个时候有点紧张,但是他说,好吧,重构通常会产生一些问题。只要你能快点修好就没事了!

我们需要一个计划来减少负载,然后,我们与我们的托管服务提供商讨论了这一点。他们的一个系统管理员提出了一个好主意:“老兄,你的服务器现在运行在一个非常常见的Apache mod_php架构上。把你的Web服务器换成Lighttpd怎么样?这是一个相当小的项目,但维基百科正在使用它。”我们同意了。(相关文章推荐:最好选择Apache服务器的四个替代品)

“杀死”服务器的第二种方法

在你的机器上设置一个现成的Web服务器,并且根本不进行优化,那么你的服务器就会挂起!管理员尽最大努力尽快重新配置所有的Web服务器。他放弃了Apache,转而使用Lighttpd FastCGI Xcache。后来我们再次上线的时候,几乎没有再感受到压力。这次这些服务器能撑多久?

这些服务器工作得出奇地好。负载比以前低了很多,平均响应时间也不错。我们彻底放心了,然后都回家睡觉了。时间不早了,我们觉得也没什么需要做的了。第二天,网站运行的还算不错,但是在高峰时段,总是接近崩溃的边缘。我们发现MySQL是瓶颈,我们再次打电话给我们的主机服务提供商。他们建议在每台Web服务器上使用MySQL从服务器进行MySQL主从同步。

“杀死”服务器的第三种方法

无论数据库服务器有多强大,它都有其局限性。当你达到极限的时候,你的服务器就会死掉!在这种情况下,有时您的数据库会变得非常慢,以至于队列中的大量网络连接会再次“杀死”我们的Web服务器。不幸的是,这个问题很难解决。内容管理系统在这方面非常简单,它不支持单独读写SQL查询。重写这一切需要很长时间,但比起分分钟遭遇暂停休眠,还是挺值得的。

MySQL同步真的成功了,网站终于稳定了!在接下来的几周和几个月里,网站成功了,用户数量开始增加。流量再次超过我们的资源极限只是时间问题。

“杀死”服务器的第四种方法

如果你不提前计划,你的服务器可能会死!

好在我们一直在思考和规划。我们优化了代码,减少了加载每个页面时所需的SQL查询数量,并且意外地发现了MemCached。首先,我们在一些核心函数上增加了对MemCached的支持,在一些重量级(慢)函数上也增加了对MemCached的支持。当我们部署这些更改时,我们无法相信结果——。这感觉有点像发现了圣杯。我们每秒的查询数量至少减少了50%。我们决定更多地使用MemCached,而不是购买另一个Web服务器。

“杀死”你的服务器的第五种方法

忘记缓存吧,你会浪费很多钱,你的服务器会挂掉!事实证明,MemCached已经帮助我们减少了MySQL服务器上70%-80%的负载,同时在Web服务器上产生了巨大的性能提升。页面加载速度相当快。

最后,我们的配置看起来很完美。即使在高峰时段,我们也不必担心崩溃或页面响应缓慢。我们做完了吗?不要!一个蓝色的网络服务器开始反应有点慢。然后就是一些错误信息,空白页等等。该系统具有良好的负载能力。在大多数情况下,服务器可以工作,但只是在大多数情况下。

“杀死”你的服务器的第六种方法

把几百个小文件放在一个文件夹里,inodes用完了,你的服务器就挂了!

是的,你没有看错。以前我们只关注MySQL、PHP和Web服务器本身,对文件系统关注不多。Smarty缓存文件存储在本地文件系统中。——所有缓存文件都存储在同一个目录中。解决方案是将Smarty放在一个专用的ReiserFS分区中。此外,我们还开启了Smarty的“use_subdirs”选项。

在过去的几年里,我们一直在优化页面。我们将Smarty缓存放在memcached中。为了更快地处理静态文件,我们安装了Varnish来减少I/O负载。我们还切换到nginx(Lighttpd会随机生成错误500的消息),安装了更多的内存,购买了更好的硬件,以及更多的硬件.................

摘要

拓展网站是一个永无止境的过程。当你解决了一个瓶颈,很可能马上就会遇到下一个瓶颈。千万不要这样想:“就这样,我们完了”然后靠边站。这将“杀死”你的服务器,甚至你的业务。规划和学习是一个持续的过程。如果你因为缺乏经验或资源而无法独自完成这份工作,你可以找一个可靠的、胜任这份工作的伙伴,与它一起工作。永远不要停止与你的团队和合作伙伴交流当前的问题和即将出现的问题。先思考再掌握主动权。

本文来自网络,不代表本站立场,转载请注明出处:https://baike.yzcslt.com/n/a2513.html

服务器500错误原因(服务器请求失败的原因)

扬州城市论坛后续将为您提供丰富、全面的关于服务器500错误原因(服务器请求失败的原因)内容,让您第一时间了解到关于服务器500错误原因(服务器请求失败的原因)的热门信息。小编将持续从百度新闻、搜狗百科、微博热搜、知乎热门问答以及部分合作站点渠道收集和补充完善信息。