我有一个有4GB内存的服务器。 在这上面我安装了32位的Slackware Linux 12.1。 当然,它并不是全部使用4GB的RAM。 我很快想把内存增加到8GB,并且正在寻找一个让系统使用它的方法。 该系统用作数据库服务器,白天处于高负载状态。
AFAICT,我有两个select:保持与32位并重build内核,失去一些性能。 或者用64bit去重新安装一切。 看看64位版本的Slackware,我可以运行-current或者Slamd64。
现在,在这个问题上:
我应该留在32位还是与64位?
如果我去64位,我应该使用-current还是Slamd64?
PS我希望能够从实际使用这些configuration的人那里得到答案,而不只是复制/粘贴我可以通过Googlefind的东西。
大多数现代的32位CPU都支持PAE,即使单个进程一次只能看到4GB的内存,它们也能处理超过4GB的物理内存。 内核将占用一些地址空间。 这Stackoverflowpost讨论PAE如何工作。
许多操作系统(包括Linux和MS Windows)都提供了一个API,允许您在进程的虚拟地址空间内操作MMU和页面覆盖。 这个工具允许你为磁盘缓冲区使用额外的内存。 不过,据我所知,唯一直接支持这个的DBMS平台是MS SQL Server。
额外的内存将提高您的数据库读取性能(这可能会提高您的整体吞吐量),但写性能将受到I / O限制。 如果您的DBcaching命中率很低(比如说小于95%),那么额外的内存可能会提高整体吞吐量。 否则,您可能需要查看您的磁盘子系统(请参阅下面的1)。
假设你需要或可以从更多的内存中受益,最好的方法是转向64位平台。 现代至强或Opteron服务器将允许您根据型号安装最高32-144GB。 这可能是你最好的select。
但是,这种安排有失败模式,可能会导致数据卷不一致(损坏)。 在日志卷上使用直写function可以缓解这种情况(因为日志不容易受到这些故障模式的影响)。 实际上,这限制了您恢复/前滚恢复模式,所以只有在您可以容忍(比如说)4小时恢复窗口的情况下才能工作。
每个32位系统的进程内存是4GB(默认情况下,进程内存分为3GB,内核分为1GB)。 如果你希望你的数据库能够访问更多的内存/每个进程/你别无select,只能安装一个64位操作系统。 如果每个进程的3GB的限制不打扰你,你可以留在当前的设置。 顺便说一下,3GiB / 1GiB还有其他的select,但是在你的具体情况下它们不会帮你。
每进程内存使用量的进一步限制以所谓的“ZONE NORMAL”的forms存在,其从不超过1GiB(准确地说是896MiB)。 当使用高于1GiB(ZONE HIGHMEM)的内存时,内核必须将该内存映射到ZONE NORMAL,从而产生更多可能的瓶颈。 ZONE HIGHMEM不存在于64位系统上,其中一切都是ZONE NORMAL。 这也是一个64位的好理由。
至于“生产中”部分:我甚至不知道你使用的是什么数据库。 我的Oracle设置几乎总是运行64位的确切原因,我已经说过了。 我不在生产中运行Slackware,但不知道谁在做。
我的€0.02:去64位。 与可能的好处相比,重新安装是微不足道的。
我几乎和你一样( 在小型数据库中是否有任何理由使用64位MySQL(和OS)? ),并且从我能发现的情况来看:32位上的MySQL每个实例不能使用超过2GB的RAM不pipe你用你的内核做什么。
如果你不运行MySQL,情况可能会有所不同。
我想问一个问题:“为什么我要用32位内核?”
我尽可能快地支持所有的硬件,而且我没有遗憾。 在工作中,我们在32位内存的64位CentOS 5上运行PostgreSQL服务器,这非常棒(除了PostgreSQL本身的某些限制外,与32位或64位无关)。
在32位系统上运行大量highmem(超过8GB)的主要危险是内核可能最终需要分配比ZONE_NORMAL更多的数据。 这意味着即使内存仍然很多,这台机器可以有效地用完内存。
另一个问题是,系统将更积极地回收内核数据结构,如cachinginode,缓冲区头和其他caching,可以帮助系统性能。
第三个问题是,在32位系统上,没有一个进程能够有效地使用超过3GB的内存。 这意味着购买超过4GB的内存仅适用于系统中没有任何进程需要全部内存的情况。
由于这些原因,build议您购买超过4GB内存的系统时,应考虑获得64位CPU并安装64位操作系统。 32位和64位系统之间的价格差异实际上是不存在的,所以没有必要再去体验highmem的痛苦了。
更多信息…
64位是唯一的方法。 在32位上,要达到> 1GB是一个创造性的破解,而对于大于4GB的破解是一个更大的破解。 [1]你说这是一个负载很重的系统,那么为什么浪费的周期能够直接映射到内存中呢?
你应该使用32位的唯一原因是供应商支持。 当你在Slackware上,我怀疑这是一个原因。
[1]例如,请参阅“ UGS NX Nastran 5.0安装和操作指南 ”中的“32位平台上的Linux内存分配限制 ” ,它简要地提到了1GB的障碍。
64bit +更多内存,如果你使用的是innodb,那么你的inndb_buffer_pool_size设置为整个系统内存的70-75%左右。 调整caching大小。 如果您使用的是最新版本的MySQL,请将/ tmp目录设置为使用tmpfs(内存),这将允许MySQL在内存中而不是在物理磁盘上创build临时表。 确保MySQL被configuration为使用/ tmp作为临时表。
如果你想增加内存,你别无select,只能运行一个64位内核。 如果你愿意的话,你可以保留一个32位的用户空间,但每个进程将被限制为最大2GB(也许是3GB)。 你不需要重新安装所有的东西,只需要一个新的内核。
大多数人正在回答问题#1,但让我在问题#2中切入。
如果你select运行64位的Slackware,你只有一个select:Slackware64。 Slamd64是Slackware的一个非官方的端口,现在已经不再需要Slackware具有官方的64位端口了。 就版本而言,您可以selectSlackware64的13.0,13.1,13.37和 – 当前版本。 另外请注意,14.0很可能会很快发布,所以你也可以等待。