上线 5 分钟,网站就炸了!

简介: 500错误

大家好,我是小林。

昨晚我发文上线了自己的网站,结果发文上线不到 10 分钟, 服务器就炸了,读者疯狂跟我说网站 500 错误了。

26.jpg

当时的场面直接尴住了,特别像在公司发布上线新的项目后,bug 频繁报。

评论区也有个课代表读者,跟大家科普了 500 错误是什么?简直太好笑了哈哈


25.png

今天就来复盘下昨天的问题。


为什么会有 500 错误?


收到大家反馈的错误后,我马上就去服务器查看 nginx 的 error 日志了,发现频繁报错了这个错误:“Too many open files”。

24.jpg

很快我就知道是文件描述符受限而导致 nginx 频繁报这个错误,每一个 TCP 连接都会占用一个文件描述符,当时发文不到 10 分钟,文章阅读就已经 1000 多了,瞬间一下子 1000 多个请求过来,就导致文件描述符被占满了,从而 nginx 就回 500 错误。

所以,要解决这个问题,就要调大文件描述符的显示。

首先,先来看看系统的最大描述符数:

23.png

这个是默认值,有18万个,那肯定不是这里受限。

然后,通过 ulimit -n 查看每个用户的最大描述符数:

22.png

这个也是默认值,也有 6.5 万个,说明也不是这里受限。

然后,通过 /proc//limits 这个文件查看  nginx 工作进程的最大描述符数:

21.jpg

可以看到,最大值才 1024 个!猜测 nginx 工作进程的最大描述符数太小而导致 nginx 报 Too many open files 的错误。


要怎么调大 nginx 的工作进程的最大描述符数呢?


很简单,只需要在 nginx.conf 配置调大 worker_rlimit_nofile 的值,这个参数单跟每个工作进程可以建立的最大连接数量息息相关,我这里调大到了 65535。

20.png

然后重新 reload nginx 的配置,再查看 /proc//limits:

19.jpg

可以看到,nginx 的工作进程最大描述符已经设置为 65535。

调大nginx工作进程最大描述符后,nginx 的 error 日志就没有在报错了,至此 500 错误的问题就解决了


为什么网站访问很慢?


解决了 500 错误的问题后,后面又有很多读者反馈网站访问太慢了。

不瞒大家说,小林的服务器的配置确实很渣,还是去年阿里云活动白嫖的。1核心 CPU,2 GB 内存,5M 带宽:

18.png

其实小林在开设网站之前,就调研了身边的朋友他们的服务器配置如何?

我有位朋友也有个网站,他的网站每日 uv 有 1 万多,也就是每天有 1 万多人访问,这是挺牛逼的访问量了,但是他的服务器配置比我还低,访问平时还是挺正常的。

我心想我网站能每日 uv 有 5000 有开心了,所以按理来说我这个配置就够的了,就没有买更好的服务器配置,就用白嫖的服务器来看看效果。

给大家看看昨晚 8 点发文后的系统监控情况:

image.gif

17.jpg

16.jpg

可以看到,CPU 和 内存远远没有达到瓶颈。所以网站访问慢的原因可以排除内存和 CPU 的限制。

接下里看看网络监控情况:

15.jpg

昨晚一发文,服务器的出口流量就直接到峰值了,一直维持 7M/s 的出口流量,这个出口流量已经达到服务器的带宽限制了。

所以,网站访问慢的原因就是服务器的带宽不够

我的网站属于静态网站,然后用 nginx 部署,没有用到数据库之类的东西,所以是一个很轻量级的网站,CPU 和 内存 目前为止都是完全够用的,而且文章的图片我都没有放到服务器上,而是放到另外一个图床,所以大家访问的只是服务器的前端文件(js,html)这些。

昨天刚发文是因为一下太多请求导致带宽被打满的,等这个峰值过去后,其实出口流量也没那么多的了,比如现在出口流量就 2M/s,带宽也勉强够用。

14.jpg

等以后小林的网站日常带宽被打满后,我在充钱升级服务器设备吧哈哈。

另外,我还给网站做了个优化,在 nginx 打开了gzip 压缩,这样传输文件会经过压缩,这样带宽流量就能减少了一些。

在没有开启 gzip 压缩之前,打开这篇 2 万字的 TCP 文章,全部资源加载完需要 6 秒(并不是说打开这个文章要 6 秒才显示)。

13.jpg

在开启 gzip 压缩后,全部资源加载完只需要不到 3 秒,性能提升 50 %!

12.jpg

以后网站有任何异常的情况,我在跟大家分享,在解决 bug 的路上进步

相关文章
|
7月前
|
测试技术 程序员 项目管理
甲方怒喷半小时:一次项目上线失败的深刻教训
小米分享了一次项目上线失败的经历,起因是运营提出一个看似简单的白名单功能。问题包括:没有需求原型导致理解偏差,新成员对项目不熟悉,测试流程不全面,以及人员变动大。解决方案涉及需求确认会、原型图设计、交接制度、团队培训和全流程测试等。这次失败提供了关于需求分析、项目管理及团队协作的教训。
61 2
|
存储 运维 监控
语雀故障与反思,随便再领半年会员!
语雀故障与反思,随便再领半年会员!
385 0
|
BI 图形学 数据库管理
天下苦广告久矣!分享五款免费且无广告的开源软件
在日常的使用中,我们需要使用各种软件来提高我们的工作效率或者进行创意的表达。然而,商业软件价格昂贵,某些国产软件又充斥着广告。因此,开源软件成为了一个不错的选择,以下是我推荐的五款优秀的开源软件。
180 1
天下苦广告久矣!分享五款免费且无广告的开源软件
|
vr&ar 开发者 iOS开发
开发者任务中心上线!千元豪礼送不停!
开发者任务中心上线啦!做任务,得积分及实物好礼,带你一站式玩转社区!
开发者任务中心上线!千元豪礼送不停!
|
C语言 C++
提前做好准备吧,过个浪漫的圣诞。
圣诞节没什么礼物,来个爱心和彩色圣诞树代码(彩色圣诞树可以写喜欢的人名字哦)
106 0
提前做好准备吧,过个浪漫的圣诞。
|
存储 缓存 监控
最近线上发生的两个坑爹锅!
最近由于在技改,发生了不少问题,前文中说的缓存穿透只是其中之一,想了想,虽然都是比较简单的问题,但是应该实际中还是有不少人碰到过,这些问题看似很简单,但是你绝对应该踩过。
最近线上发生的两个坑爹锅!
程序人生 - 刷屏众怒!付费会员还要再花钱点播,腾讯视频割韭菜的五大绝招,你中了几个?
程序人生 - 刷屏众怒!付费会员还要再花钱点播,腾讯视频割韭菜的五大绝招,你中了几个?
124 0
程序人生 - 刷屏众怒!付费会员还要再花钱点播,腾讯视频割韭菜的五大绝招,你中了几个?
|
达摩院
【非广告】半年时间 90% 的收益就问你慌不慌
先说明这篇文章不包含任何广告内容,也不提供任何投资理财建议,股市有风险,投资需谨慎! 都说牛市来了,今年的 A 股的行情确实很不错,从上面的截图中可以看到阿粉的一只基金已经收益 90% 了。90% 是什么概念,反正阿粉是没有过的,估计很多人都没有经历过这种收益,所以这几天阿粉慌的一批,除了慌的很之外,另一个就是懊悔的很,当初应该多买点的,只能说人性是贪婪的。
【非广告】半年时间 90% 的收益就问你慌不慌
|
弹性计算 算法 数据可视化
头条!!20年轻小伙教你如何上线——后端用户管理项目。震惊35岁高危程序员
ECS的操作 和 java-ssm框架 /后端用户管理项目
164 0
头条!!20年轻小伙教你如何上线——后端用户管理项目。震惊35岁高危程序员
|
新零售 机器人 双11
双十一剁手大赛提前开启,看各大电商憋了啥大招?
距离一年一度、万众期盼已久的“双十一狂欢购物节“快到了,许多小伙伴早就将购物车装得满满当当,收藏了一堆店铺,准备大干一场。今日凌晨,天猫的双十一预售正式打响,正式宣告这场剁手大赛提前开启,各大电商平台早就为此摩拳擦掌,蓄势待发,我们一起来看看他们都准备了那些大招。
3074 0