solr高並發問題——內存溢出


一、問題描述

    在對用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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM