码迷,mamicode.com
首页 > 其他好文 > 详细

solr高并发问题——内存溢出

时间:2015-07-08 19:16:01      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

一、问题描述

    在对用solr实现的全文检索系统做性能测试时,发现并发量达到400时,内存溢出。200并发量无任何问题。

二、问题追踪

    使用jconsole查看内存消耗,老年代基本占满。线程数大量处于blocked状态。查看blocked条件,发现是记录日志log4j线程一直处于阻塞状态。修改solr中log4j日志配置(仅输出警告信息,并增加缓存),如下:

#Update ‘log4j.appender.file.layout.ConversionPattern‘ value
#Wed Apr 01 14:53:18 CST 2015
solr.log=logs/
log4j.rootLogger=WARN,file, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n
log4j.appender.CONSOLE.BufferedIO=true
log4j.appender.CONSOLE.BufferSize=8192
log4j.appender.CONSOLE.ImmediateFlush=false
#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9
log4j.appender.file.BufferedIO=true
log4j.appender.file.BufferSize=8192
log4j.appender.file.ImmediateFlush=false

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

    问题依旧未得到解决,重新查看阻塞线程堆栈信息。发现调用log4j的线程不是solr后端的线程,而是velocity进程。问题找到。修改velocity配置文件(velocity.properties),仅输出错误信息。如下:

input.encoding=UTF-8

output.encoding=UTF-8

runtime.log.error.stacktrace = false  

runtime.log.warn.stacktrace = false  

runtime.log.info.stacktrace = false  

runtime.log.logsystem.class = org.apache.velocity.runtime.log.SimpleLog4JLogSystem  

runtime.log.logsystem.log4j.category = velocity_log  

log4j.logger.velocity_log=ERROR,CONSOLE

问题解决。但是只是回避了日志输出的问题。

三、最终解决方案

    1、减少日志输出。

    2、增加缓存功能。

    3、实现异步日志IO功能。

PS:velocity.properties配置文件的前两行用于解决solr/browse前端页面中文乱码的问题。只需在velocity.properties配置文件添加编码格式。并在solr.config中配置使用就OK。solr.config配置如下:

       <str name="wt">velocity</str>

       <str name="v.template">browse</str>

       <str name="v.layout">layout</str>

       <str name="v.properties">velocity.properties</str>

       <str name="v.contentType">text/html;charset=UTF-8</str>

solr高并发问题——内存溢出

标签:

原文地址:http://my.oschina.net/u/1403753/blog/476245

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!