Мы создали сервер с объединительной платой SQL. Недавно мы обнаружили эту проблему, которая вызвала высокий количество потоков, используемых w3wp.exe. Пройдя всю кодовую базу, мы смогли сузить круг причин, связанных с NLog.
Мы настроили NLog, следуя настройкам в файле веб-конфигурации.
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd">
<targets async="true">
<target name="file" xsi:type="File" fileName="${basedir}/Logs/${shortdate}_printcloud.log" archiveFileName="${basedir}/Logs/ArchiveAuto/{#}_printcloud.log" archiveDateFormat="yyyy-MM-dd" archiveAboveSize="50000000" archiveEvery="Day" archiveNumbering="DateAndSequence" maxArchiveFiles="14" archiveOldFileOnStartup="false" createDirs="true" layout="${longdate} ${uppercase:${level}} ${logger} ${message} (${callsite:includSourcePath=true}) ${exception:format=tostring}" />
</targets>
<rules>
<logger name="PrintCloud.*" minlevel="Trace" maxlevel="Error" writeTo="file" />-->
</rules>
</nlog>
<configuration>
Внутри концентратора мы использовали регистратор, как показано ниже.
public class ConnectorHub : Hub
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public void Connect(string message)
{
logger.Debug("Connection Recieved");
(new SignalRHubHelper()).SendConnectRecieved(Context.ConnectionId);
}
}
Когда мы запускаем объединительную плату с этими включенными конфигурациями, мы сталкиваемся с проблемой использования большого количества потоков, когда клиенты пытаются повторно подключиться. Но если мы закомментируем код конфигурации NLog из файла веб-конфигурации, объединительная плата будет работать отлично. Кто-нибудь сталкивался с подобным поведением при использовании объединительной платы? Что может быть причиной такого поведения?
Версия SignalR — 2.2.2 Версия NLog — 4.4.9
РЕДАКТИРОВАТЬ 1
Проблема, похоже, не возникает, когда мы отключаем ведение журнала трассировки сигнализатора в файле webconfig. Мы использовали NLog.NLogTraceListener
для регистрации трассировки сигнализатора.
<system.diagnostics>
<sources>
<source name="SignalR.SqlMessageBus">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.ServiceBusMessageBus">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.RedisMessageBus">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.ScaleoutMessageBus">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.Transports.WebSocketTransport">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.Transports.ServerSentEventsTransport">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.Transports.ForeverFrameTransport">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.Transports.LongPollingTransport">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.Transports.TransportHeartBeat">
<listeners>
<add name="traces" />
</listeners>
</source>
<source name="SignalR.ReflectedHubDescriptorProvider">
<listeners>
<add name="traces" />
</listeners>
</source>
</sources>
<!--Sets the trace verbosity level-->
<switches>
<add name="SignalRSwitch" value="Verbose" />
</switches>
<sharedListeners>
<add name="traces" type="NLog.NLogTraceListener, NLog" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
Вместо использования NLog.NLogTraceListener
и использования System.Diagnostics.TextWriterTraceListener
вместо этого также не возникает никаких проблем.
async
(и без архивации) - person Julian   schedule 24.05.2017<logger name=*..>
? - person Julian   schedule 26.05.2017