2014-11-06 761 views
0

我正在使用rsyslog通过TCP向远程计算机发送消息。 Java服务正在写入名为local4的系统日志中的记录器。内存圣人从1MB开始,增长到4-5GB。我不知道如何调试这个问题,并找出Rsyslog内存如何以及如何减少内存。下面是我rsyslog.confrsyslog占用大量内存

$ModLoad imuxsock # provides support for local system logging 
$ModLoad imklog # provides kernel logging support 

$ModLoad imudp 
$UDPServerRun 514 

$KLogPermitNonKernelFacility on 


$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat 

$RepeatedMsgReduction on 

$FileOwner syslog 
$FileGroup adm 
$FileCreateMode 0640 
$DirCreateMode 0755 
$Umask 0022 
$PrivDropToUser syslog 
$PrivDropToGroup syslog 

auth,authpriv.*     /var/log/auth.log 
*.*;auth,authpriv.none,local4.none    -/var/log/syslog 

mail.*       -/var/log/mail.log 



$template RTFormat,"%msg%\n" 
$WorkDirectory /var/lib/rsyslog # where to place spool files 
$ActionQueueFileName fwdRuleRTLogs1 # unique name prefix for spool files 
$ActionQueueMaxDiskSpace 1g # 4gb space limit (use as much as possible) 
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown 
$ActionQueueType LinkedList # run asynchronously 
$ActionResumeRetryCount -1 # infinite retries if host is down 

$MaxMessageSize 5k 
local4.* @@internal-elb.amazonaws.com:5149;RTFormat 

任何帮助将是巨大的。

+0

尝试使用jmap制作堆转储(http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html)并使用Eclipse Memory Analyzer进行分析:http:// www.eclipse.org/mat/ – 2014-11-06 06:00:37

+0

Java客户端的内存使用情况非常稳定,但它是rsyslog的内存不断增长。所以我不确定如果Java堆转储在那里有很多用处? – 2014-11-06 06:41:21

+0

你说得对,我弄错了。在这种情况下,Java堆转储不会帮助你。 – 2014-11-06 06:47:03

回答

1

此盒子是否从其他主机接收日志?如果不是,则启用UDP服务器不是必需的。 在收集日志方面,这是一个客户端还是服务器?

另外:你确定在TCP端点上收到日志吗? 有

$ActionResumeRetryCount -1

意味着所有的日志将被存储在磁盘上,但尝试将它们运送到服务器时加载到内存中。