如何充分利用可用带宽?

如何充分利用可用带宽?

我正在使用 node.js 开发一种新型代理服务器。使用集群模块,我能够分叉进程(内核数量翻倍)。服务器配置为 8GB RAM、8 核 Intel (Xeon) 处理器,带宽限制为每月 500 MB,它是 Ubuntu Precise Machine。但是,我们无法使用所有带宽。我们的用户每天使用的带宽仅为 30MB。我们希望用户使用全部带宽,但他们无法使用,而且即使在 30 MB 限制下,速度也很慢,因为 node.js 服务器由于套接字挂起而每 10 分钟(平均时间)重新启动一次。

由于 node.js 中一些未捕获的异常,套接字挂起,node.js 往往不响应并进入无限循环,然后其中一个集群进程死亡,我看到集群的数量(16 个进程时一切都很好),如果 node.js 的进程数下降到 14,那么就会有 cronjob,它会杀死整个 node.js 并重新启动整个代理脚本。

我修改了 sysctl.conf 和 limits.conf。这些文件如下 (sysctl.conf)http://pastebin.com/6Unvgayc和 limits.confhttp://pastebin.com/daLiSsYr,如果我的这些设置有误,请提出建议。我是 Linux 服务器带宽调优方面的新手,如果我做错了什么或遗漏了什么,请告诉我

答案1

我怀疑这里存在术语混淆,导致对您要解决的问题产生混淆。

托管服务提供商通常会提供每月的流量(通常称为带宽)。根据提供的计划,可能是 500MB 或 1TB 等。如果“带宽”太低,您将为过度消耗的流量向托管服务付费。总的来说,作为应用程序开发人员,您的目标是保持每个用户发送和接收的数据量较低 - 因为大多数情况下,更少的数据和相同或更好的用户满意度和交易意味着您不会发送过多的数据并产生业务费用(这是一条非常普遍的规则,很容易被反例打破;不过,不发送不需要的额外数据的原则是好的)。

网络服务的用户还需要带宽,更传统的定义是,每单位间隔传输的数据量,通常以每秒比特数来衡量。这通常也受托管服务提供商的限制,因为您与其他人共享,并且他们的互联网连接在某些时候会受到限制。在托管服务中(机器之间),您可能会看到 1Gb/s(每秒 1,000,000,000 比特)。您的托管服务可能限制为 30MB/s(小型托管服务,不靠近主干网)。这种“瞬时”带宽、您发送的最大突发速率和每月数据使用量(每月托管带宽)之间没有明确的关系。您可以高速突发数据,但只能使用少量数据。另一方面,如果您的最大速度很低,那么您就不能超过每月带宽……但在这成为问题之前,您会遇到用户抱怨性能的问题。

而这很可能就是真正的问题。性能。我怀疑客户抱怨速度不够快。这导致他们开始关注带宽。但这不是问题所在。性能问题是您的服务器被锁定了。当用户发出请求时,服务器开始处理,然后锁定,然后客户端超时。用户看到糟糕的服务,您去优化……什么?

您已选择优化数据传输速度。但这可能不是问题所在。服务故障才是问题所在。修复应用程序,然后客户端不再超时。这不是数据量和速度的问题,因为在任何带宽级别,挂起都会对工作的进展造成绝对的阻碍。

答案2

如果您的月度限额为 500MB,而您每天使用 30MB,那么您已经超出限额。30MB x 30 天 = 900MB。无论如何,这不是问题所在。

看来基本问题出在 node.js 应用程序上,而不是服务器。您不需要 fork node.js,因为任何实质上阻塞的任务都应拆分为异步任务。使用多进程作为主要分发机制,您会失去在单片服务器上运行 node.js 的大部分好处。主 node.js 事件循环应始终能够接收连接,并且应始终处理异常,或者至少执行清理(在这种情况下,关闭套接字并返回事件循环)。

事实上,如果异常导致任何应用程序死机,问题就出在应用程序上,而不是运行它的机器上。如果我们谈论带宽吞吐量,应用程序挂起将严重限制正在处理的连接的效率。

答案3

带宽是一个通用术语,几乎可以表示任何意思。我不明白你为什么要充分利用你的带宽。

您可以寻找两种类型:

您可以向您的站点传输的数据量。

在特定时间内可以通过的数据量。用于通信和网络。拥有比所需更大的带宽可以平滑使用高峰。

如果数据延迟或丢失,您的数据服务器缓冲区可能会被堵塞,并且不会接受任何新请求。它们将处于不工作状态。

相关内容