Ticket #120 (new 优化) — at Initial Version
resin lru缓存锁竞争和重启的关系
| Reported by: | chenchongqi | Owned by: | yuanhuoqing |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | 报价库 | Version: | 报价库5.0 |
| Keywords: | resin, lru缓存, 重启 | Cc: | |
| Due Date: |
Description
现象
在重启的jvm日志中,我们也发现和lru缓存相关的情况出现,具体现象是,大量的线程在等lru缓存:
"http-app-a-8081-2362$964202179" daemon prio=10 tid=0x0000002b57c3a800 nid=0x771b waiting for monitor entry [0x0000000049794000..0x00000000
49796a30]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.caucho.util.LongKeyLruCache.get(LongKeyLruCache.java:212)
- waiting to lock <0x0000002ab5a0bf28> (a com.caucho.util.LongKeyLruCache)
at com.caucho.db.store.BlockManager.getBlock(BlockManager.java:220)
at com.caucho.db.store.Store.readBlock(Store.java:472)
at com.caucho.db.store.RawTransaction.readBlock(RawTransaction.java:55)
at com.caucho.db.store.Store.writeFragment(Store.java:1083)
at com.caucho.server.cache.CacheInode$CacheOutputStream.write(CacheInode.java:283)
at com.caucho.server.connection.ResponseStream.writeCache(ResponseStream.java:785)
at com.caucho.server.connection.ResponseStream.writeNext(ResponseStream.java:452)
at com.caucho.server.connection.ToByteResponseStream.flushByteBuffer(ToByteResponseStream.java:525)
at com.caucho.server.connection.ToByteResponseStream.write(ToByteResponseStream.java:332)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:263)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
- locked <0x0000002ae2946928> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at com.caucho.vfs.i18n.JDKWriter$OutputStreamEncodingWriter.write(JDKWriter.java:154)
at com.caucho.server.connection.ToByteResponseStream.flushCharBuffer(ToByteResponseStream.java:476)
at com.caucho.server.connection.ToByteResponseStream.print(ToByteResponseStream.java:415)
at com.caucho.server.connection.ResponseWriter.write(ResponseWriter.java:121)
at com.caucho.server.connection.IncludeResponseStream.flushCharBuffer(IncludeResponseStream.java:155)
at com.caucho.server.connection.ToByteResponseStream.flushBuffer(ToByteResponseStream.java:429)
at com.caucho.server.connection.ToByteResponseStream.close(ToByteResponseStream.java:449)
at com.caucho.server.connection.IncludeResponseStream.close(IncludeResponseStream.java:315)
at com.caucho.server.connection.AbstractHttpResponse.finish(AbstractHttpResponse.java:2182)
at com.caucho.server.connection.AbstractHttpResponse.close(AbstractHttpResponse.java:279)
at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:544)
at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:368)
at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:1009)
at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:962)
at _jsp._price__jsp._jspService(_price__jsp.java:2101)
分析
- 应用压力过大请求数量太多,it商城也偶尔出现这种情况
- lru缓存配置不合理
处理
- 考虑修改resin的cache配置,改成只缓存纯静态的文件,目前it商城已经修改了一台服务器,正在观察中。
<!-- - Sets timeout values for cacheable pages, e.g. static pages. 原来是所有页面缓存5秒,其实动态jsp内容变动频繁,另外缓存时间也短,再加上原本resin之外页面有自己的缓存,这里就没太大必要 <cache-mapping url-pattern="/" expires="5s"/> --> <cache-mapping url-pattern="*.gif" expires="60s"/> <cache-mapping url-pattern="*.jpg" expires="60s"/> <cache-mapping url-pattern="*.png" expires="60s"/> 后面这两个是新加上的: <cache-mapping url-pattern="*.js" expires="60s"/> <cache-mapping url-pattern="*.css" expires="60s"/> - 其他相关减少访问量的措施
Note: See
TracTickets for help on using
tickets.
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)