哪个linux版本为具有大量请求的应用程序提供最佳性能?

我是Linux新手,我尽可能地学习。

有一个服务器应用程序需要处理大量的请求每秒。 该服务器是使用C ++为Linux编写的。 我们需要在这个服务器上部署一个免费的操作系统,为我们提供最好的性能。 如果你决定,你会select哪个操作系统?

我不认为你的问题很清楚。 Linux是操作系统。 这个发行版是把Linux和其他软件打包成一个很好的包,供你安装和运行。

那说,Linux服务器的主要竞争者是:

  • RedHat / CentOS
  • Debian的
  • Ubuntu服务器?

在发行版之间,主要版本的软件之间几乎没有什么区别,除了内核之外。 (我知道CentOS仍在运行2.6.18。)我个人的投票是Debian Stable,但是发行版select是非常私人的事情。 在做出决定之前,花一些时间在维基百科和谷歌以及各种发行版网站上。 并随时提问!

所有的现代发行版都将给你几乎相同的性能,因为它们将基于相同的内核(Linux 2.6.x)。

我推荐Ubuntu服务器版 ,它是用户友好的,易于启动和运行。

这一切都取决于应用程序的编码,它是如何做的等等。 最近的Linux版本已经包含了新的API来提高高吞吐量,比如2.6.17中引入的splice / vmsplice。 但它显然需要你的应用程序来使用它们。 现代发行版的所有最新版本都至less有这个内核。

拼接基本上允许你在文件描述符之间传递数据而不需要复制它。 你只要告诉操作系统,从那里拿出那么多字节,然后把它们发送到那里。 它减less了数据复制和上下文切换,因为它们都在内核中完成。

haproxy等应用程序可以使用此调用在低端服务器上填充双10千兆位以太网卡。

现在splice / vmsplice / tee不会有太大的变化,如果你的应用程序没有花费大部分时间复制数据。 但还有其他的系统调用,你想调查处理大量的同时连接。

例如,确保你使用epoll而不是select / poll。 后者在每次调用时发送所有他们感兴趣的FD列表,epoll_create在内核中build立一个列表,epol_wait调用只是引用该列表。 您可以在听到数千个套接字时看到优势,并且每秒钟调用一次/select一万次。

除此之外,你想看看运行时的sysctl设置。 默认值通常太保守了。

最后,我肯定会推荐你使用基于订阅/支持的发行版,如RHEL或SLES; 他们提供的支持服务types正是您所需要的,因为如果内核中存在性能衰退,他们将帮助您,并且他们将能够迅速获得修复。

您需要在各种发行版上针对特定应用程序进行基准testing。 只给出您提供的信息在StackOverflow上得到的任何答案都是纯粹的猜测。 当高性能是必不可less的,没有基准的替代品。

我会说,你的目标是一个内核版本,而不是一个特定的操作系统。 最重要的是,你应该仔细考虑调整networking层次,这可以带来巨大的变化。

老实说,我会推荐Arch Linux 。 对于一台服务器来说,设置起来相当简单。 这是i686或amd64优化,所以非常快。 吃豆子是很好的更新。

我的稳定性也没有问题。

我认为更重要的是找出哪个发行版可以给你最好的权利来分发你的服务器软件! 由于您的服务器正在运行C ++代码,因此您可能只会将自己的代码作为二进制文件分发。 对于某些分布来说,这可能会也可能不会。 更糟糕的是,您可能在代码中使用了某些GPL库,这会导致您的代码“inheritance”GPL许可证。 不过,我不确定是否愿意将代码发布为开源代码。

不过,如果你的代码只依赖于Linux内核,那么你所要做的就是根据这个内核和你自己的代码创build你自己的发行版。 使用现有的发行版可能会使整个许可证部分成为巨大的许可证噩梦。

大多数Linux为您提供预编译的软件。

如果性能是你的目标,那么试试Gentoo:所有的软件包和内核本身都是在你的硬件上编译的,并且经过优化后可以更好地工作。 这给一些性能提升:)

我同意之前发布的一些答案,如果我们正在谈论性能,你的问题不是发行版(redhat vs. ubuntu vs. ….)。 我使用Ubuntu,但它只是为了支持,大社区,用户友好。 如果你真的想优化速度,我会给你两个build议:

  1. closures/卸载每个不需要的守护进程。 在大多数Linux发行版以及Windows中,都有一些默认启动的服务,可能不是您的应用程序所需要的。

  2. 如果可以的话,编译你自己的内核。 最近它已经发展到包括很多东西(硬件设备,networking协议…)的支持。 如果你能够包含你所需要的,你将会拥有一个更轻,更快的内核。 我在Gentoo中没有经验,但是如果真正编译内核的话,让你select应该包含什么,这是你需要的。