id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	due_date
120	resin lru缓存锁竞争和重启的关系	chenchongqi	yuanhuoqing	"== 现象 ==
在重启的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""/>
}}}
* 其他相关减少访问量的措施"	优化	new	major		报价库			resin, lru缓存, 重启		
