上线 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 的路上进步

相关文章
|
8月前
|
运维 Kubernetes 监控
避免业务中断,K8s节点故障排查攻略,速来围观!
避免业务中断,K8s节点故障排查攻略,速来围观!
125 0
|
存储 运维 监控
语雀故障与反思,随便再领半年会员!
语雀故障与反思,随便再领半年会员!
397 0
|
Java 开发者
Alibaba刚上线的JDK源码整合手册,瞬间遭受百万源码开发者追捧
随着JDK的不断迭代更新,国内的一些一线互联网大厂都安耐不住了,都开始了自己内部的JDK源码内卷,其中最受大家关注的阿里最先发布了一份号称21年最新的JDK源码整合手册,瞬间受到大批的源码开发者追捧一时风头无两!!!!
|
存储 缓存 监控
最近线上发生的两个坑爹锅!
最近由于在技改,发生了不少问题,前文中说的缓存穿透只是其中之一,想了想,虽然都是比较简单的问题,但是应该实际中还是有不少人碰到过,这些问题看似很简单,但是你绝对应该踩过。
最近线上发生的两个坑爹锅!
苹果慌了,从死不承认到主动降价,库克只用了4个月
当苹果丧失定价权时,要么损失利润率,要么失去市场份额,或者两者都会失去。
610 0
|
运维 Devops 持续交付
“快的那个,会被慢的拖死”,记不断奔跑、看着阿里云产品管控慢慢长大的那个人——尹书威
传统运维人要从Ops走向DevOps,从项目走向产品,从资源走向应用。
13309 0
|
程序员 测试技术
|
CDN
百度上线百度金矿,个人电脑也可以挖金矿
百度金矿号称一个可以让个人电脑利用闲置网络资源赚钱的软件,这种软件近几年好几家公司都有做过尝试,迅雷,小米等互联网公司都有搞过。
1119 0