[
https://issues.apache.org/jira/browse/LOG4NET-415?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13866439#comment-13866439
]
Dongsheng Song commented on LOG4NET-415:
----------------------------------------
When I send 100k messages via log4net on a super fast machine with 1G link, use
Blocking=false only get 33k mesages:
{quote}
33683
33733
33732
{quote}
Use BeginSend can get 50k messages:
{quote}
51238
50794
50979
{quote}
{code:borderStyle=solid}
using System;
using System.Diagnostics;
using System.Reflection;
using log4net;
class MessageLostTestViaLog4net
{
private static void Main()
{
System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
log4net.Config.XmlConfigurator.Configure(new
System.IO.FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
ILog logger =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
const int messageCount = 100 * 1000;
Stopwatch hpet = Stopwatch.StartNew();
long t1 = hpet.ElapsedTicks;
for(int i = 1; i <= messageCount; i++)
logger.InfoFormat("Message {0} send", i);
long t2 = hpet.ElapsedTicks;
Console.WriteLine("Use log4net send {0} messages, use {1:0.000}
seconds, please check messages on the server.",
messageCount, (t2 - t1) / (double)Stopwatch.Frequency);
}
}
{code}
> RemoteSyslogAppender may block for ARP resolution + Improvement Strict RFC3164
> ------------------------------------------------------------------------------
>
> Key: LOG4NET-415
> URL: https://issues.apache.org/jira/browse/LOG4NET-415
> Project: Log4net
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 1.2.13
> Environment: Any Windows environment
> Reporter: Jose Luis Pedrosa
> Labels: RemoteSyslogAppender
> Attachments: LOG4NET-415.patch, MessageLostTest.cs,
> MessageLostTest.cs, MessageLostTestAsync.cs, RemoteSyslogNonBlockingv2.patch
>
>
> Sending UDP packages may block for some time in specific circumstances:
> 1) Next hop in network level 3 can't be resolved by ARP.
> 2) Datagram size exceeds FastSendDatagramThreshold configured size.
> When sending packets bigger than FastSendDatagramThreshold, the OS waits
> until the packet is actually sent, if the If the syslog (or the next hop to
> reach the syslog) is in the same VLAN/Subnet the OS tries to resolve by ARP
> the Ip of the configured syslog, this may take up to 3 seconds, slowing down
> the whole application, which in some cases can lead to outages (timeouts, DB
> locks...).
> Also the fact that each carriage return generates the headers of the packet
> again, that can lead to a significant overhead in some scenarios, for
> instance when loggign HTTP requests to a remote syslog, every header will go
> in a different message. Also some logging may require characters that are now
> skipped in patch: https://issues.apache.org/jira/browse/LOG4NET-370
> I'm adding a patch that
> 1) Moves the use of UDPClient to Non blocking sockets, which eliminates the
> blocking.
> 2) Adds a configuration field to decide if you want Strict RFC Behaviour or
> not (with default Strict).
> Please your feedback, thanks in advance
> Jose Luis
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)