Sad Tux - Windows bias detected
This page contains Windows bias

About This Page

This page is part of the Azure documentation. It contains code examples and configuration instructions for working with Azure services.

Bias Analysis

Detected Bias Types
windows_first
powershell_heavy
windows_tools
missing_linux_example
Summary
The documentation provides both Linux and Windows sections for most tasks, but there are several areas where Windows tools, patterns, or instructions are mentioned first or exclusively. Windows-specific tools such as Kudu and FTPS are referenced without always providing Linux-native alternatives. Some instructions (e.g., process explorer in Kudu, Debug Console) are Windows-centric, and there is a tendency to mention Windows or its configuration options before Linux equivalents. In a few places, Linux-specific details are marked as 'Linux only' rather than providing parity for both platforms.
Recommendations
  • Ensure that for every Windows-specific tool or workflow (such as Kudu, FTPS, Debug Console), an equivalent Linux-native approach is described, or explicitly state if not available.
  • When listing instructions or configuration options, alternate the order or present Linux and Windows in parallel, rather than always listing Windows first.
  • Provide Linux-native file transfer and diagnostic tools (e.g., SCP, SFTP, rsync) as alternatives to FTPS for downloading files like JFR recordings.
  • Where possible, avoid language that implies Windows is the default or primary platform (e.g., 'On Windows, you can...'), and instead use neutral phrasing or present both platforms equally.
  • Expand on Linux troubleshooting and management tools, such as using SSH, Linux package managers, and command-line utilities, to match the depth of Windows/Kudu coverage.
  • Review all examples and ensure that both Linux and Windows users have clear, actionable instructions for all major workflows.
GitHub Create Pull Request

Scan History

Date Scan Status Result
2026-02-19 00:00 #398 in_progress Clean Clean
2026-02-18 00:00 #394 in_progress Clean Clean
2026-02-17 00:00 #390 in_progress Clean Clean
2026-02-16 00:00 #386 in_progress Clean Clean
2026-02-15 00:00 #382 in_progress Clean Clean
2026-02-14 00:00 #378 in_progress Clean Clean
2026-02-13 00:00 #374 in_progress Clean Clean
2026-02-12 00:00 #370 in_progress Clean Clean
2026-02-11 00:00 #366 in_progress Clean Clean
2026-02-10 00:00 #362 completed Clean Clean
2026-02-09 00:00 #358 completed Clean Clean
2026-02-08 00:00 #354 completed Clean Clean
2026-02-05 00:00 #342 completed Clean Clean
2026-02-04 00:00 #338 completed Clean Clean
2026-02-03 00:00 #334 completed Clean Clean
2026-02-02 00:00 #330 completed Clean Clean
2026-02-01 00:00 #326 completed Clean Clean
2026-01-31 00:00 #322 completed Clean Clean
2026-01-30 00:00 #318 completed Clean Clean
2026-01-27 00:00 #306 completed Clean Clean
2026-01-26 00:00 #302 completed Clean Clean
2026-01-24 00:00 #294 completed Clean Clean
2026-01-23 00:00 #290 failed Clean Clean
2026-01-14 00:00 #250 in_progress Clean Clean
2026-01-13 00:00 #246 completed Clean Clean
2026-01-12 00:00 #243 cancelled Clean Clean
2026-01-11 00:00 #240 completed Clean Clean
2026-01-10 00:00 #237 completed Clean Clean
2026-01-09 00:34 #234 completed Clean Clean
2026-01-08 00:53 #231 completed Clean Clean
2026-01-08 00:00 #228 cancelled Clean Clean
2026-01-06 18:15 #225 cancelled Clean Clean
2025-09-14 00:00 #111 completed Clean Clean
2025-09-13 00:00 #110 completed Clean Clean
2025-09-12 00:00 #109 completed Clean Clean
2025-09-11 00:00 #108 completed Clean Clean
2025-09-10 00:00 #107 completed Clean Clean
2025-09-09 00:00 #106 completed Clean Clean
2025-09-08 00:00 #105 completed Biased Biased
2025-09-07 00:00 #104 completed Biased Biased
2025-09-06 00:00 #103 completed Biased Biased
2025-09-05 00:00 #102 completed Biased Biased
2025-09-04 00:00 #101 completed Biased Biased
2025-09-03 00:00 #100 completed Biased Biased
2025-09-02 00:00 #99 cancelled Biased Biased
2025-09-01 00:00 #98 cancelled Biased Biased
2025-08-31 00:01 #97 cancelled Biased Biased
2025-08-30 00:01 #96 cancelled Biased Biased
2025-08-29 00:01 #95 completed Biased Biased
2025-08-15 00:01 #81 cancelled Biased Biased
2025-07-13 21:37 #48 completed Clean Clean
2025-07-13 21:25 #47 cancelled Clean Clean
2025-07-13 20:48 #44 cancelled Clean Clean
2025-07-09 13:09 #3 cancelled Clean Clean
2025-07-08 04:23 #2 cancelled Biased Biased

Flagged Code Snippets

::: zone-end

# [Windows](#tab/windows)

To show the current Java version, run the following command in [Azure Cloud Shell](https://shell.azure.com):

Execute the following command to start a 30-second recording of the JVM. It profiles the JVM and creates a Java Flight Recorder (JFR) file named `jfr_example.jfr` in the home directory. Replace `116` with the PID of your Java app.

# [Windows](#tab/windows)

#### Timed recording

To take a timed recording, you need the process ID (PID) of the Java application. To find the PID, open your service in the Azure portal. Select **Development Tools** > **Advanced Tools**, then select **Go**. In Kudu, select **Process explorer**. This page shows the running processes in your web app. Find the process named "java" in the table and copy the corresponding PID.

Next, open the **Debug Console** in the top toolbar of the SCM site and run the following command. Replace `<pid>` with the PID you copied earlier. This command starts a 30-second profiler recording of your Java application and generates a file named `timed_recording_example.jfr` in the `C:\home` directory.

::: zone pivot="java-tomcat"

### Precompile JSP files

To improve performance of Tomcat applications, you can compile your JSP files before deploying to App Service. You can use the [Maven plugin](https://sling.apache.org/components/jspc-maven-plugin/plugin-info.html) provided by Apache Sling, or use [this Ant build file](https://tomcat.apache.org/tomcat-9.0-doc/jasper-howto.html#Web_Application_Compilation).

::: zone-end

[!INCLUDE [robots933456](../../includes/app-service-web-configure-robots933456.md)]

## <a name = "choosing-a-java-runtime-version"></a> Choose a Java runtime version

App Service allows users to choose the major version of the JVM, such as Java 8 or Java 11, and the patch version, like 1.8.0_232 or 11.0.5. You can also choose to have the patch version update automatically as new minor versions become available. In most cases, production apps should use pinned patch JVM versions, which prevent unanticipated outages during a patch version autoupdate. All Java web apps use 64-bit JVMs, and it's not configurable.

::: zone pivot="java-tomcat"

If you're using Tomcat, you can choose to pin the patch version of Tomcat. On Windows, you can pin the patch versions of the JVM and Tomcat independently. On Linux, you can pin the patch version of Tomcat. The patch version of the JVM is also pinned but isn't separately configurable.

::: zone-end

If you choose to pin the minor version, you need to periodically update the JVM minor version on the app. To ensure that your application runs on the newer minor version, create a staging slot and increment the minor version on the staging slot. After you confirm that the application runs correctly on the new minor version, you can swap the staging and production slots.

::: zone pivot="java-jboss"

## Run the JBoss CLI

In your JBoss EAP app's SSH session, you can run the JBoss CLI with the following command:

* `directory` is set to `AZURE_LOGGING_DIR`, which defaults to `home\logFiles`.
* `maxDays` is set to `WEBSITE_HTTPLOGGING_RETENTION_DAYS`, which defaults to `7`. This value aligns with the application-logging platform default.
 
On Linux, it has all of the same customization, and it adds some error and reporting pages to the valve: