在1GB RAM上memcached tomcat mysql

时间:2011-02-07 19:04:39

标签: java caching memcached

我是memcached和缓存的新手。我有一个在Ubuntu + Tomcat + MySQL上运行的Java Web应用程序,在VPS服务器上有1GB的内存。

为缓存添加大约256MB的memcached层是否有意义?这会对服务器造成太大的负担吗?哪个更适合缓存渲染的html页面或数据库对象?

请告知。

3 个答案:

答案 0 :(得分:2)

如果您要缓存页面,请不要使用memcached,请使用Varnish。但是,很有可能不是很好地使用内存。缓存页面交换内存用于计算和数据库工作,但它确实每页花费了大量内存,因此最适合生成单个页面所需的计算和数据库工作量很大(或页面非常小)的情况!)。此外,如果您想在页面上使用每用户自定义(例如显示购物车中的商品数量),请考虑页面缓存不会有效,甚至可能无效。至少没有进入一些真正毛茸茸的恶作剧(边缘包括,任何人?)。

如果您不打算缓存页面,并且您的应用程序位于一台计算机上,那么使用memcached或类似内容就没有意义了。像这样的缓存服务器的目的是使一台机器上的内存作为另一台机器的缓存 - 就像文件服务器共享磁盘一样,它们本质上是内存服务器。在一台机器上,您可以将所有内存分配给堆上的Java和缓存对象。

您使用的是对象关系映射器吗?如果是,请查看它是否支持二级缓存。三大实现(Hibernate,OpenJPA和EclipseLink)都支持内存缓存。如果你自己进行缓存,他们可能会做得更好。

但是,如果你没有使用映射器,你别无选择,只能自己进行缓存。 LinkedHashMap中有扩展点用于构建LRU缓存,当然还有人们最喜欢的SoftReference与HashMap结合使用。另外,可能存在可以下载和使用的缓存实现 - 如果Apache Commons库中没有内容,我会感到震惊。

答案 1 :(得分:0)

memcached不会在您的服务器上添加任何明显的负载,但它将是您的应用无法使用的内存。如果您计划暂时只使用一个应用服务器,那么最好使用in-JVM缓存。

到目前为止要缓存的内容,答案就在上面的某个地方。您不希望准确地缓存数据库中的内容,并且您当然不希望缓存最终输出。您的应用程序中有一个数据模型表示,它不完全是数据库中的内容(例如,User对象可能由来自几个不同表的多个查询组成)。缓存那种最重复使用的东西。

memcached site中有很多信息可以帮助您理解并开始使用缓存,特别是memcached。

答案 2 :(得分:0)

这样做可能有意义,为什么不尝试像64 MB这样的较小尺寸,看看它是怎么回事。当您为memcache使用更多资源时,其他所有资源都会减少。你应该尝试一下,看看会给你带来最佳表现。