dotTrace 2021.2 Help

Profile Web Application on IIS Server

Typically, determining performance issues in a web application is required when it is already running on a server. The table summarizes all possible options of profiling the application:

ProsNot cons but features
Local profiling
  • Easy to configure/use: you profile via the dotTrace GUI

  • dotTrace must be installed and run on the server, which may be impossible due to security restrictions, absence of GUI, etc

Remote profiling
  • Easy to configure/use: you profile via the dotTrace GUI

  • Snapshots are automatically uploaded to your local machine

  • dotTrace remote agent must be installed and run on the server

  • Communication via network is required

Profiling via console tools
  • No network communication required

  • Ability to create a number of predefined profiling configs and run them on demand

  • The console tools must be copied to and run on the server

  • Resulting snapshots must be manually copied from the server to the machine with dotTrace

Local profiling

Local profiling

Typically, local profiling is used when you need to profile the app that is hosted right on your (developer's) machine or on some testing environment, which doesn't impose any security/performance restrictions.

To locally profile a web app hosted on an IIS server

  1. Install dotTrace on the server.

  2. Run dotTrace as a standalone application on behalf of Administrator. The dotTrace Home window will open.

  3. Add a run configuration - the configuration that tells dotTrace how to run the profiled application:

    • Under Choose what you want to profile, New Process Run, click Add run configuration Add run configuration.

    • In the New Run Configuration wizard, choose IIS and click Next.

    • In Open URL, specify the URL of the profiled application. If you do not do this, dotTrace will start profiling of the first running application pool it'll be able to find.

    • Optionally, in in browser, specify the browser that dotTrace should use to open the URL.

    • Optionally, in Set environment variables, specify required environment variables. Each variable must be specified on a new line.

    • Click Save.

  4. Make sure the created run configuration is selected in the New Process Run list.

  5. Under Choose how you want to profile it, specify profiling options:

  6. If you want dotTrace to start collecting profiling data right after you start the session, under Run profiling, select Collect profiling data from start.

  7. Click Start. This will start the profiling session.

  8. Go through a particular workflow in your application (if you want to evaluate its performance) or reproduce a particular performance issue. Collect snapshots using the Get Snapshot button in the profiling controller window. Learn more about how to control the profiling session

  9. After you collect the data, either close the profiled application or detach the profiler using the Detach button in the controller window.

  10. Analyze the collected snapshots using either the Performance Viewer or Timeline Viewer depending on the selected profiling type.

Remote profiling

Remote profiling

Remote profiling is the best choice when it comes to a sudden performance drop/memory issue.

How it works: dotTrace is running on your local machine, the remote agent is running on the server, both communicating through TCP, as easy as that. The best thing about remote profiling is that you still work on your local machine – dotTrace copies and opens the collected snapshots automatically.

To remotely profile a web app hosted on an IIS server

  1. On the web server, do the following:

    • Copy the RemoteAgent.zip file from the dotTrace installation directory on your local computer (by default, C:\Users\[username]\AppData\Local\JetBrains\Installations\dotTrace[N]) to any directory on the server.

    • Unzip the file on the server.

    • Start RemoteAgent.exe from the command line on the server.

    • Make sure the inbound connections to Remote Agent (by default, port 9100) are not blocked by the firewall.

  2. Run dotTrace as a standalone application. The dotTrace Home window will open.

  3. On the right from Choose what you want to profile, select Remote.

  4. In the Remote Connection Settings window, in Remote Agent URL, specify the address of the remote agent service. By default, net.tcp://[remote_computer_IP_address]:9100/RemoteAgent

  5. Click Connect to establish connection with the remote host.

  6. Under Choose what you want to profile, Running Process, find and select the w3wp.exe process that corresponds to the app pool running the profiled application.

  7. Under Choose how you want to profile it, specify profiling options:

  8. If you want dotTrace to start collecting profiling data right after you start the session, under Run profiling, select Collect profiling data from start.

  9. Click Start. This will start the profiling session.

  10. Go through a particular workflow in your application (if you want to evaluate its performance) or reproduce a particular performance issue. Collect snapshots using the Get Snapshot button in the profiling controller window. Learn more about how to control the profiling session

  11. After you collect the data, either close the profiled application or detach the profiler using the Detach button in the controller window.

  12. Analyze the collected snapshots using either the Performance Viewer or Timeline Viewer depending on the selected profiling type.

Remote profiling

Profiling via console tools

Profiling with console tool

Console tools are the best if you need to automate profiling: for example, you should profile your web app from time to time. Another possible scenario is when you don't have access to the server but some other person does, so you can provide them with profiling tools and a batch file.

How does it work? In short, you copy console tools to the server and either run the app under profiling (the app pool will be restarted) or attach the tool to the running application pool w3wp.exe.

To profile a web app on an IIS server using console tools

  1. Download the zip archive with the dotTrace.exe tool and copy/unpack it to the server.

  2. Now, you should start profiling of the application pool that hosts your application: you can either attach to an already running app pool or start a new one under profiling. Starting the new one doesn't give you any advantages over attaching, so, we'll take a look only at the latter (you can still find all the details in Working with dotTrace Command-Line Profiler).
    To attach dotTrace.exe to the running app pool:

    dotTrace.exe attach 1234 --save-to=snapshot.dtp
    where 1234 is the process ID of the corresponding w3wp.exe process.
    Tip: To get the ID, in IIS Manager, open the required server. On Worker Processes page, you will find the list of running workers and their IDs.

  3. When it comes to taking performance snapshots, you have two options:

    • Get a snapshot by timeout:

      dotTrace.exe attach 1234 --save-to=snapshot.dtp --timeout=5m
      here the snapshot will be taken after 5 minutes, then the profiler will detach from the process.

      Get snapshot by timeout
    • Get a snapshot on process exit. The dotTrace.exe tool will take a snapshot once the profiled application successfully finishes its work (so, if the app is "killed", no snapshot is collected). To make this happen, you can, for example, Recycle the corresponding application pool in the IIS Manager.

      Get snapshot on process exit
  4. Copy the resulting snapshot to the computer with installed dotTrace and analyze it either in the Performance Viewer or Timeline Viewer (depends on the profiling type you select).
    Note that it is normal that the snapshots contain large amount of native code.

Last modified: 08 April 2021