我们有一组四个 Web 应用程序(C#、ASP.NET、NHibernate)和一些过去共享 Northscale 实例的服务。我们后来升级到了 Membase,此时我们实际上能够开始有效利用 NHibernate 二级缓存。但是,一旦我们将应用程序投入生产,memcache 服务就会停止在端口 11211 上监听 telnet,并且管理界面显示它正在使用 9.99k 个连接。根据冲击我们数据库的流量来判断,我们认为应该发生以下一个或多个步骤。在这两种情况下,服务器都位于 Windows 2008 服务器上。
1) 我们应该允许更多服务器连接。据称,这是通过使用 -c 参数调用可执行文件来实现的。实际上,在我们的机器上,当我们尝试这样做时,我们收到一个错误,指示它无法加载 default_engine.so。2) 我们应该减少应用程序使用的池大小。目前,主 Web 应用程序(具有许多为不同客户端运行的实例)的池大小在 10 到 100 个连接之间。3) 我们需要考虑这是否是网络饱和的问题。根据管理控制台,我们的 RAM 绰绰有余。所有流量是否可能使 Rackspace 的一些硬件不堪重负?
还有其他明显的问题根源被我们忽视了吗?
答案1
看起来这是 membase 提供程序的问题。显然,它为我们应用程序中的每个实体创建了单独的客户端(它们的数量非常多)。将其乘以我们拥有的网站数量,问题就很容易理解了。另一位开发人员对代码进行了调整,改变了分配策略。现在它运行顺利。