Skip to content

Commit 6a8eba0

Browse files
authored
Merge pull request #204981 from MicrosoftDocs/main
Merge main to live, 4 AM
2 parents 4fde2ce + 1630c8c commit 6a8eba0

File tree

187 files changed

+4878
-1872
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+4878
-1872
lines changed

articles/api-management/api-management-api-import-restrictions.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ You can create [SOAP pass-through](import-soap-api.md) and [SOAP-to-REST](restif
226226

227227
* For an open-source tool to resolve and merge `wsdl:import`, `xsd:import`, and `xsd:include` dependencies in a WSDL file, see this [GitHub repo](https://github.com/Azure-Samples/api-management-schema-import).
228228

229+
### WS-* specifications
230+
231+
WSDL files incorporating WS-* specifications are not supported.
232+
229233
### Messages with multiple parts
230234
This message type is not supported.
231235

articles/automation/how-to/private-link-security.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ For more information, see [Key Benefits of Private Link](../../private-link/pri
3939

4040
## Limitations
4141

42-
- In the current implementation of Private Link, Automation account cloud jobs cannot access Azure resources that are secured using private endpoint. For example, Azure Key Vault, Azure SQL, Azure Storage account, etc. To workaround this, use a [Hybrid Runbook Worker](../automation-hybrid-runbook-worker.md) instead.
42+
- In the current implementation of Private Link, Automation account cloud jobs cannot access Azure resources that are secured using private endpoint. For example, Azure Key Vault, Azure SQL, Azure Storage account, etc. To workaround this, use a [Hybrid Runbook Worker](../automation-hybrid-runbook-worker.md) instead. Hence, on-premise VMs are supported to run Hybrid Runbook Workers against an Automation Account with Private Link enabled.
4343
- You need to use the latest version of the [Log Analytics agent](../../azure-monitor/agents/log-analytics-agent.md) for Windows or Linux.
4444
- The [Log Analytics Gateway](../../azure-monitor/agents/gateway.md) does not support Private Link.
4545

articles/azure-monitor/essentials/metrics-supported.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2757,7 +2757,7 @@ This latest update adds a new column and reorders the metrics to be alphabetical
27572757

27582758
|Metric|Exportable via Diagnostic Settings?|Metric Display Name|Unit|Aggregation Type|Description|Dimensions|
27592759
|---|---|---|---|---|---|---|
2760-
|PEBytesIn|Yes|Bytes In|Count|Total|Total number of Bytes Out|No Dimensions|
2760+
|PEBytesIn|Yes|Bytes In|Count|Total|Total number of Bytes In|No Dimensions|
27612761
|PEBytesOut|Yes|Bytes Out|Count|Total|Total number of Bytes Out|No Dimensions|
27622762

27632763

articles/azure-monitor/profiler/profiler-azure-functions.md

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Profile Azure Functions app with Application Insights Profiler
33
description: Enable Application Insights Profiler for Azure Functions app.
44
ms.contributor: charles.weininger
55
ms.topic: conceptual
6-
ms.date: 05/03/2022
6+
ms.date: 07/15/2022
77
ms.reviewer: jogrima
88
---
99

@@ -23,7 +23,6 @@ In this article, you'll use the Azure portal to:
2323

2424
:::image type="content" source="./media/profiler-azure-functions/choose-plan.png" alt-text="Screenshot of where to select App Service plan from drop-down in Functions app creation.":::
2525

26-
2726
- Linked to [an Application Insights resource](../app/create-new-resource.md). Make note of the instrumentation key.
2827

2928
## App settings for enabling Profiler
@@ -70,26 +69,14 @@ The app settings now show up in the table:
7069
:::image type="content" source="./media/profiler-azure-functions/app-settings-table.png" alt-text="Screenshot showing the two new app settings in the table on the configuration blade.":::
7170

7271

73-
## View the Profiler data for your Azure Functions app
74-
75-
1. Under **Settings**, select **Application Insights (preview)** from the left menu.
76-
77-
:::image type="content" source="./media/profiler-azure-functions/app-insights-menu.png" alt-text="Screenshot showing application insights from the left menu of the Functions app.":::
78-
79-
1. Select **View Application Insights data**.
80-
81-
:::image type="content" source="./media/profiler-azure-functions/view-app-insights-data.png" alt-text="Screenshot showing the button for viewing application insights data for the Functions app.":::
82-
83-
1. On the App Insights page for your Functions app, select **Performance** from the left menu.
84-
85-
:::image type="content" source="./media/profiler-azure-functions/performance-menu.png" alt-text="Screenshot showing the performance link in the left menu of the app insights blade of the functions app.":::
86-
87-
1. Select **Profiler** from the top menu of the Performance blade.
88-
89-
:::image type="content" source="./media/profiler-azure-functions/profiler-function-app.png" alt-text="Screenshot showing link to profiler for functions app.":::
72+
> [!NOTE]
73+
> You can also enable Profiler using:
74+
> - [Azure Resource Manager Templates](../app/azure-web-apps-net-core.md#app-service-application-settings-with-azure-resource-manager)
75+
> - [Azure PowerShell](/powershell/module/az.websites/set-azwebapp)
76+
> - [Azure CLI](/cli/azure/webapp/config/appsettings)
9077
9178

9279
## Next Steps
93-
94-
- Set these values using [Azure Resource Manager Templates](../app/azure-web-apps-net-core.md#app-service-application-settings-with-azure-resource-manager), [Azure PowerShell](/powershell/module/az.websites/set-azwebapp), or the [Azure CLI](/cli/azure/webapp/config/appsettings).
95-
- Learn more about [Profiler settings](profiler-settings.md).
80+
Learn how to...
81+
> [!div class="nextstepaction"]
82+
> [Generate load and view Profiler traces](./profiler-data.md)

articles/azure-monitor/profiler/profiler-cloudservice.md

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Enable Profiler for Azure Cloud Services | Microsoft Docs
33
description: Profile live Azure Cloud Services with Application Insights Profiler.
44
ms.topic: conceptual
55
ms.custom: devx-track-dotnet
6-
ms.date: 05/25/2022
6+
ms.date: 07/15/2022
77
---
88

99
# Enable Profiler for Azure Cloud Services
@@ -59,29 +59,10 @@ Add the following `SinksConfig` section as a child element of `WadCfg`:
5959
6060
Deploy your service with the new Diagnostics configuration. Application Insights Profiler is now configured to run on your Cloud Service.
6161

62-
## Generate traffic to your service
63-
64-
Now that your Azure Cloud Service is deployed with Profiler, you can generate traffic to view Profiler traces.
65-
66-
Generate traffic to your application by setting up an [availability test](../app/monitor-web-app-availability.md). Wait 10 to 15 minutes for traces to be sent to the Application Insights instance.
67-
68-
Navigate to your Azure Cloud Service's Application Insights resource. In the left side menu, select **Performance**.
69-
70-
:::image type="content" source="./media/profiler-cloudservice/cloud-service-performance.png" alt-text="Screenshot of the Application Insights performance option in the left menu of the Azure portal.":::
71-
72-
Select the **Profiler** for your Cloud Service.
73-
74-
:::image type="content" source="./media/profiler-cloudservice/select-profiler.png" alt-text="Screenshot of selecting the Profiler from the Cloud Service App Insights performance pane.":::
75-
76-
Select **Profile now** to start a profiling session. This process will take a few minutes.
77-
78-
:::image type="content" source="./media/profiler-cloudservice/profile-now.png" alt-text="Screenshot of selecting Profile Now to start a profiling session.":::
79-
80-
For more instructions on profiling sessions, see the [Profiler overview](./profiler-overview.md#start-a-profiler-on-demand-session).
81-
82-
[!INCLUDE [azure-monitor-log-analytics-rebrand](../../../includes/azure-monitor-instrumentation-key-deprecation.md)]
83-
8462
## Next steps
8563

86-
- Learn more about [configuring Profiler](./profiler-settings.md).
87-
- [Troubleshoot Profiler issues](./profiler-troubleshooting.md).
64+
Learn how to...
65+
> [!div class="nextstepaction"]
66+
> [Generate load and view Profiler traces](./profiler-data.md)
67+
68+
[!INCLUDE [azure-monitor-log-analytics-rebrand](../../../includes/azure-monitor-instrumentation-key-deprecation.md)]

articles/azure-monitor/profiler/profiler-containers.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Profile Azure Containers with Application Insights Profiler
33
description: Enable Application Insights Profiler for Azure Containers.
44
ms.contributor: charles.weininger
55
ms.topic: conceptual
6-
ms.date: 06/16/2022
6+
ms.date: 07/15/2022
77
ms.reviewer: jogrima
88
---
99

@@ -45,7 +45,7 @@ In this article, you'll learn the various ways you can:
4545
dotnet new mvc -n EnableServiceProfilerForContainerApp
4646
```
4747

48-
Note that we've added delay in the `Controllers/WeatherForecastController.cs` project to simulate the bottleneck.
48+
We've added delay in the `Controllers/WeatherForecastController.cs` project to simulate the bottleneck.
4949
5050
```CSharp
5151
[HttpGet(Name = "GetWeatherForecast")]
@@ -101,7 +101,7 @@ In this article, you'll learn the various ways you can:
101101
102102
1. Via your Application Insights resource in the Azure portal, take note of your Application Insights instrumentation key.
103103
104-
:::image type="content" source="./media/profiler-containerinstances/application-insights-key.png" alt-text="Find instrumentation key in Azure portal":::
104+
:::image type="content" source="./media/profiler-containerinstances/application-insights-key.png" alt-text="Screenshot of finding instrumentation key in Azure portal.":::
105105
106106
1. Open `appsettings.json` and add your Application Insights instrumentation key to this code section:
107107
@@ -163,9 +163,9 @@ Service Profiler session finished. # A profiling session is complet
163163
164164
1. Wait for 2-5 minutes so the events can be aggregated to Application Insights.
165165
1. Open the **Performance** blade in your Application Insights resource.
166-
1. Once the trace process is complete, you will see the Profiler Traces button like it below:
166+
1. Once the trace process is complete, you'll see the Profiler Traces button like it below:
167167

168-
:::image type="content" source="./media/profiler-containerinstances/profiler-traces.png" alt-text="Profile traces in the performance blade":::
168+
:::image type="content" source="./media/profiler-containerinstances/profiler-traces.png" alt-text="Screenshot of Profile traces in the performance blade.":::
169169

170170

171171

@@ -178,6 +178,6 @@ docker rm -f testapp
178178
```
179179

180180
## Next Steps
181-
182-
- Learn more about [Application Insights Profiler](./profiler-overview.md).
183-
- Learn how to enable Profiler in your [ASP.NET Core applications run on Linux](./profiler-aspnetcore-linux.md).
181+
Learn how to...
182+
> [!div class="nextstepaction"]
183+
> [Generate load and view Profiler traces](./profiler-data.md)
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
---
2+
title: Generate load and view Application Insights Profiler data
3+
description: Generate load to your Azure service to view the Profiler data
4+
ms.contributor: charles.weininger
5+
ms.topic: conceptual
6+
ms.date: 07/15/2022
7+
ms.reviewer: jogrima
8+
---
9+
10+
# View Application Insights Profiler data
11+
12+
Let's say you're running a web performance test. You'll need traces to understand how your web app is running under load. In this article, you'll:
13+
14+
> [!div class="checklist"]
15+
> - Generate traffic to your web app by starting a web performance test or starting a Profiler on-demand session.
16+
> - View the Profiler traces after your load test or Profiler session.
17+
> - Learn how to read the Profiler performance data and call stack.
18+
19+
## Generate traffic to your Azure service
20+
21+
For Profiler to upload traces, your service must be actively handling requests.
22+
23+
If you've newly enabled Profiler, run a short [load test](/vsts/load-test/app-service-web-app-performance-test).
24+
25+
If your Azure service already has incoming traffic or if you just want to manually generate traffic, skip the load test and start a **Profiler on-demand session**:
26+
27+
1. From the Application Insights overview page for your Azure service, select **Performance** from the left menu.
28+
1. On the **Performance** pane, select **Profiler** from the top menu for Profiler settings.
29+
30+
:::image type="content" source="./media/profiler-overview/profiler-button-inline.png" alt-text="Screenshot of the Profiler button from the Performance blade." lightbox="media/profiler-settings/profiler-button.png":::
31+
32+
1. Once the Profiler settings page loads, select **Profile Now**.
33+
34+
:::image type="content" source="./media/profiler-settings/configure-blade-inline.png" alt-text="Screenshot of Profiler page features and settings." lightbox="media/profiler-settings/configure-blade.png":::
35+
36+
## View traces
37+
38+
1. After the Profiler sessions finish running, return to the **Performance** pane.
39+
1. Under **Drill into...**, select **Profiler traces** to view the traces.
40+
41+
:::image type="content" source="./media/profiler-overview/trace-explorer-inline.png" alt-text="Screenshot of trace explorer page." lightbox="media/profiler-overview/trace-explorer.png":::
42+
43+
The trace explorer displays the following information:
44+
45+
| Filter | Description |
46+
| ------ | ----------- |
47+
| Profile tree v. Flame graph | View the traces as either a tree or in graph form. |
48+
| Hot path | Select to open the biggest leaf node. In most cases, this node is near a performance bottleneck. |
49+
| Framework dependencies | Select to view each of the traced framework dependencies associated with the traces. |
50+
| Hide events | Type in strings to hide from the trace view. Select *Suggested events* for suggestions. |
51+
| Event | Event or function name. The tree displays a mix of code and events that occurred, such as SQL and HTTP events. The top event represents the overall request duration. |
52+
| Module | The module where the traced event or function occurred. |
53+
| Thread time | The time interval between the start of the operation and the end of the operation. |
54+
| Timeline | The time when the function or event was running in relation to other functions. |
55+
56+
## How to read performance data
57+
58+
Profiler uses a combination of sampling methods and instrumentation to analyze your application's performance. While performing detailed collection, the Profiler:
59+
60+
- Samples the instruction pointer of each machine CPU every millisecond.
61+
- Each sample captures the complete call stack of the thread, giving detailed information at both high and low levels of abstraction.
62+
- Collects events to track activity correlation and causality, including:
63+
- Context switching events
64+
- Task Parallel Library (TPL) events
65+
- Thread pool events
66+
67+
The call stack displayed in the timeline view is the result of the sampling and instrumentation. Because each sample captures the complete call stack of the thread, it includes code from Microsoft .NET Framework, and any other frameworks that you reference.
68+
69+
### Object allocation (clr!JIT\_New or clr!JIT\_Newarr1)
70+
71+
**clr!JIT\_New** and **clr!JIT\_Newarr1** are helper functions in .NET Framework that allocate memory from a managed heap.
72+
- **clr!JIT\_New** is invoked when an object is allocated.
73+
- **clr!JIT\_Newarr1** is invoked when an object array is allocated.
74+
75+
These two functions usually work quickly. If **clr!JIT\_New** or **clr!JIT\_Newarr1** take up time in your timeline, the code might be allocating many objects and consuming significant amounts of memory.
76+
77+
### Loading code (clr!ThePreStub)
78+
79+
**clr!ThePreStub** is a helper function in .NET Framework that prepares the code for initial execution, which usually includes just-in-time (JIT) compilation. For each C# method, **clr!ThePreStub** should be invoked, at most, once during a process.
80+
81+
If **clr!ThePreStub** takes extra time for a request, it's the first request to execute that method. The .NET Framework runtime takes a significant amount of time to load the first method. Consider:
82+
- Using a warmup process that executes that portion of the code before your users access it.
83+
- Running Native Image Generator (ngen.exe) on your assemblies.
84+
85+
### Lock contention (clr!JITutil\_MonContention or clr!JITutil\_MonEnterWorker)
86+
87+
**clr!JITutil\_MonContention** or **clr!JITutil\_MonEnterWorker** indicate that the current thread is waiting for a lock to be released. This text is often displayed when you:
88+
- Execute a C# **LOCK** statement,
89+
- Invoke the **Monitor.Enter** method, or
90+
- Invoke a method with the **MethodImplOptions.Synchronized** attribute.
91+
92+
Lock contention usually occurs when thread _A_ acquires a lock and thread _B_ tries to acquire the same lock before thread _A_ releases it.
93+
94+
### Loading code ([COLD])
95+
96+
If the .NET Framework runtime is executing [unoptimized code](/cpp/build/profile-guided-optimizations) for the first time, the method name will contain **[COLD]**:
97+
98+
`mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined`
99+
100+
For each method, it should be displayed once during the process, at most.
101+
102+
If loading code takes a substantial amount of time for a request, it's the request's initiate execute of the unoptimized portion of the method. Consider using a warmup process that executes that portion of the code before your users access it.
103+
104+
### Send HTTP request
105+
106+
Methods such as **HttpClient.Send** indicate that the code is waiting for an HTTP request to be completed.
107+
108+
### Database operation
109+
110+
Methods such as **SqlCommand.Execute** indicate that the code is waiting for a database operation to finish.
111+
112+
### Waiting (AWAIT\_TIME)
113+
114+
**AWAIT\_TIME** indicates that the code is waiting for another task to finish. This delay occurs with the C# **AWAIT** statement. When the code does a C# **AWAIT**:
115+
- The thread unwinds and returns control to the thread pool.
116+
- There's no blocked thread waiting for the **AWAIT** to finish.
117+
118+
However, logically, the thread that did the **AWAIT** is "blocked", waiting for the operation to finish. The **AWAIT\_TIME** statement indicates the blocked time, waiting for the task to finish.
119+
120+
### Blocked time
121+
122+
**BLOCKED_TIME** indicates that the code is waiting for another resource to be available. For example, it might be waiting for:
123+
- A synchronization object
124+
- A thread to be available
125+
- A request to finish
126+
127+
### Unmanaged Async
128+
129+
In order for async calls to be tracked across threads, .NET Framework emits ETW events and passes activity IDs between threads. Since unmanaged (native) code and some older styles of asynchronous code lack these events and activity IDs, the Profiler can't track the thread and functions running on the thread. This item is labeled **Unmanaged Async** in the call stack. Download the ETW file to use [PerfView](https://github.com/Microsoft/perfview/blob/master/documentation/Downloading.md) for more insight.
130+
131+
### CPU time
132+
133+
The CPU is busy executing the instructions.
134+
135+
### Disk time
136+
137+
The application is performing disk operations.
138+
139+
### Network time
140+
141+
The application is performing network operations.
142+
143+
### When column
144+
145+
The **When** column is a visualization of the variety of _inclusive_ samples collected for a node over time. The total range of the request is divided into 32 time buckets, where the node's inclusive samples accumulate. Each bucket is represented as a bar. The height of the bar represents a scaled value. For the following nodes, the bar represents the consumption of one of the resources during the bucket:
146+
- Nodes marked **CPU_TIME** or **BLOCKED_TIME**.
147+
- Nodes with an obvious relationship to consuming a resource (for example, a CPU, disk, or thread).
148+
149+
For these metrics, you can get a value of greater than 100% by consuming multiple resources. For example, if you use two CPUs during an interval on average, you get 200%.
150+
151+
## Next steps
152+
Learn how to...
153+
> [!div class="nextstepaction"]
154+
> [Configure Profiler settings](./profiler-settings.md)
155+
156+
157+
[performance-blade]: ./media/profiler-overview/performance-blade-v2-examples.png
158+
[trace-explorer]: ./media/profiler-overview/trace-explorer.png

0 commit comments

Comments
 (0)