我有一個當前正在生產的WCF服務。代碼性能不是我們希望它們成爲的地方,我們無法在我們的Staging環境中重現。跟蹤對WCF服務所做的所有呼叫(+他們的堆棧)
我想知道是否有可能記錄對服務和服務所做的每個方法調用。本質上,我想要一個所有調用和時間戳的順序列表(我們的代碼不是多線程的)。
有沒有辦法實現這一點,而無需工具的二進制文件。在web.config中的system.diagnostic節點下是否有一定級別的跟蹤,我們可以更改?
我有一個當前正在生產的WCF服務。代碼性能不是我們希望它們成爲的地方,我們無法在我們的Staging環境中重現。跟蹤對WCF服務所做的所有呼叫(+他們的堆棧)
我想知道是否有可能記錄對服務和服務所做的每個方法調用。本質上,我想要一個所有調用和時間戳的順序列表(我們的代碼不是多線程的)。
有沒有辦法實現這一點,而無需工具的二進制文件。在web.config中的system.diagnostic節點下是否有一定級別的跟蹤,我們可以更改?
您是否在配置文件中配置了跟蹤? This是關於這個問題的好文章。
這裏是你可以使用和修改您的需求一個例子:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="ServiceModel"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\ServiceModel.svclog" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="MessageLogging"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\MessageLogging.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="True"
logMalformedMessages="False"
logMessagesAtServiceLevel="True"
logMessagesAtTransportLevel="False"
maxMessagesToLog="10000"
maxSizeOfMessageToLog="10000" />
</diagnostics>
</system.serviceModel>
使用Service Trace Viewer Tool(SvcTraceViewer.exe)來查看生成的日誌。
檢查WCF Tracing以及可選WCF message logging並使用SvcTraceViewer檢查收集的數據 - 則可以選擇建立自己的跟蹤偵聽器用於記錄例如痕跡數據庫。 WCF還提供performance counters。
這聽起來像你需要分析你的服務。在這種情況下,我看不到堆棧跟蹤如何幫助你。 –
是否有像* jstack *或* pstack *或* lsstack *這樣的工具?一組詳盡的函數調用跟蹤將會讓您猜測大部分時間負責什麼。隨機抽取的中等大小的堆棧軌跡會給你一個很好的想法,因爲時間所佔的時間越多,越多的樣本就會捕獲它。在您清楚瞭解需要花費多少時間之前,您需要的堆棧樣本數量可能會很驚人。 –