我们发布的每个页面都会在服务器上增加大约 2 MB 的内存。是配置问题吗?
仅供参考,它是带有旧 vbscript 代码的 SDL Tridion 2011 SP1。请建议。
我们发布的每个页面都会在服务器上增加大约 2 MB 的内存。是配置问题吗?
仅供参考,它是带有旧 vbscript 代码的 SDL Tridion 2011 SP1。请建议。
不 - 这不是配置问题。
至少,也就是说,假设您看到的是内存泄漏。Tridion 在渲染过程中会缓存各种项目,并且其中一些缓存行为是可配置的。您是说每次页面渲染都会增加内存吗?而且它不会再次下降?哪个进程拥有这个内存?它是发布者服务,还是 COM+ 代理 (dllhost),还是其他什么?
仅仅通过配置 Tridion 是不可能造成内存泄漏的。
您的事件日志中是否出现了任何可能对此有所启发的错误?不要忘记查看应用程序/系统日志以及 Tridion 日志。
它会一直增加直到停止响应吗?还是这块内存后来被回收了?
使用 VBScript 模板不一定是个问题,但我肯定会尝试确保您的所有对象都在模板中正确发布(将它们设置为Nothing
),并且代码审查总是一个好主意。
正如 Dave 所建议的,使用默认模板进行测试始终是一个好主意。
我认为最重要的评论已经发表。这很可能是由于没有释放您使用过的对象Set blah = foo
而不使用Set blah = Nothing
释放它而导致的内存泄漏。但是,如果发布者没有继续增长到失败点,那么发布者可能只是很好地缓存了您的模板。
对于 Tridion 的早期版本,我们有一个名为 CodePlumber 的社区构建的 PowerTool(可在SDLTridionWorld.com 的 BBX 上获得)来查找此类泄漏。正如您清楚地知道 VBScript(并且该工具是使用基于 VbScript 的经典 ASP 编写的),可能值得阅读该代码或重新使用它来测试您的模板。您甚至可能希望通过将其迁移到新版本来赚取一些奖励积分PowerTools for 2011框架来获得一些奖励积分。
我的最后一个问题是这些模板是否已从早期版本的 Tridion 中移出,如果是,是否观察到相同的内存增长。如果没有,您可能会看到在发布过程中如何处理旧模板的新问题。
你没有提到内存在哪里增加,但最常见的地方是在 COM+ 对象中。
如果是这种情况,解决此问题的蛮力方法是在内存阈值处实现 COM+ 回收。阈值取决于您开始发现问题的位置以及服务器上的可用内存,但 1GB 是开始调整的好点。
这种回收应该不会影响您的用户体验。
请注意,这实际上并不能解决问题 - 它只是防止问题导致系统的其余部分瘫痪。
正如其他发帖人所提到的,解决问题可能意味着在您的旧 VBScript 代码中跟踪内存泄漏。