下面的屏幕截图显示了我的zope实例的缓存相关状态随时间的变化(到目前为止3个月)。
我们在从3000一直到6000000的时间段内多次增加了缓存大小。除了最近的一个blip之外,我们已经达到了3000万的上限(不确定是什么参数)(参见'年份'图表)。这发生在大约1000000的高速缓存大小,之后,对高速缓存大小的更改似乎对缓存的对象或zope的内存使用没有影响。
zope / plone进程从使用大约500 MB内存转移到使用3GB(我们在此服务器上有8GB)。
我的预期是,向上滑动缓存大小将允许zope利用更多的可用服务器内存,但它仍然停留在3GB(服务器上可能的8GB)。
是否有其他设置可能会“限制”3GB的内容?
答案 0 :(得分:2)
猜测,您的操作系统限制了每个进程的内存大小。
在bash shell中,检查ulimit -v
以查看是否设置了虚拟内存限制。有关该命令的完整选项列表,请参阅man bash
。
有关如何使用ulimit
的详细信息,请参阅Limit memory usage for a single Linux process。
答案 1 :(得分:2)
我不知道你服务器的内存是怎么回事,但是你这样做是错误的:你根本无法在内存中拥有600万个对象,这是不可能的:在一个在Plone 4.x中的典型安装,您需要介于 50 GB 和 150 GB 内存之间。
要解决这个问题,我们需要更多信息:您使用的Plone版本是什么?你的数据库中有多少个对象?多少线程?您的服务器架构是什么,32位还是64位?
第二,请务必安装最新版本的munin.zope插件,以收集有关您服务器的可靠信息(给Leo Rochael提示)。
第三,阅读this thread on the core developers list以了解如何为缓存大小计算更实际的数字(帽子提示为Hanno Schlichting)。
第四,缓慢移动数字并花时间监测结果;检查内存中的对象总数,避免不惜任何代价进行内存交换。如果您发现对象数低于目标值,则可以停止增加缓存大小。记住:你永远不会拥有记忆中的所有物品,这是非常困难的,因为人们往往只访问你内容的一部分。第五,如果你在Plone 4.x测试DateTime 3.0.3(在临时服务器上投入生产之前),这可能会使你的内存消耗进一步减少高达40%(有人告诉我它现在也有效)在Plone 3.x中,但我没有检查它自己。)
第六,在Plone setup list分享您的结果!
晚安,祝你好运!答案 2 :(得分:1)
32位平台 - 不知道这是否仅限于英特尔 - 每个进程限制为3GB。这是因为它每个进程最多只能处理4GB,内核使用底部1GB。当然,PAE允许您访问高达64GB,但是您在此处遇到的每个进程限制都有。你真的无法在32位平台上运行高流量的plone站点了。通常最简单的解决方案是将操作系统升级到64位版本,因为除非你有非常古老的硬件,否则它应该已经能够运行x86-64。