Resin includes high level profiling capability for profiling requests and database conenctions.
Enabling the Profiler
<web-app ...>
<servlet-mapping servlet-class="com.caucho.profiler.ProfilerServlet" url-pattern="/resin-profiler">
<init>
<profiler enabled="true"/>
</init>
<load-on-startup/>
</servlet-mapping>
Profiling requests
Request profiling gives insight into the time taken for requests from client browsers.
It imposes very little overhead and is suitable for production servers.
<web-app ...>
<filter filter-name="resin-profiler"
filter-class="com.caucho.profiler.ProfilerFilter">
<init use-query="false"/>
</filter>
<filter-mapping filter-name="resin-profiler" url-pattern="*">
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
View Results
Profiling Results for /webapp
Name | Average Time | Total Time | Invocation Count |
| 1.749 | 1.749 | 1 |
| | 0.000 | 0 |
Profiling sub-requests
Sub-request profiling adds profiling information for pages that are sub-requests of the top level request,
typically with <jsp:include>, <jsp:forward>, or the equivalent mechanisms for Servlets.
It imposes a bit more overhead and may be suitable for production servers.
<web-app ...>
<filter filter-name="resin-profiler"
filter-class="com.caucho.profiler.ProfilerFilter">
<init use-query="false"/>
</filter>
<filter-mapping filter-name="resin-profiler" url-pattern="*">
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
View Results
Profiling Results for /webapp
Name | Average Time | Total Time | Invocation Count |
| 1.749 | 1.749 | 1 |
| 0.863 | 0.863 | 1 |
| 0.575 | 0.575 | 1 |
| 0.060 | 0.060 | 1 |
| | 0.000 | 0 |
Profiling databases
The profiler-point directive is used in the database driver to configure
profiling of database usage. Results are given for each unique sql statement
or prepared statement.
Database profiling imposes more overhead than request profiling and
should be used on production servers with care.
<database jndi-name="jdbc/caucho/crm">
<driver>
<type>org.postgresql.Driver</type>
<url>jdbc:postgresql://127.0.0.1:5432/...</url>
<user>...</user>
<password>...</password>
<profiler-point/>
</driver>
<spy/>
</database>
View results
Profiling Results for /webapp
Name | Average Time | Total Time | Invocation Count |
| 4.198 | 4.198 | 1 |
→ | jdbc:postgresql://127.0.0.1:5432/test |
| | 8.007 | |
→ | INSERT INTO Address (ID, city, country, line1, line2, state, zip) VALUES (?, ?, ?, ?, ?, ?, ?) |
| 0.003 | 1.863 | 560 |
→ | INSERT INTO Contact (ID, email, fax, mobile, phone) VALUES (?, ?, ?, ?, ?) |
| 0.003 | 1.262 | 420 |
→ | SELECT c.ID, c.address, c.comment, c.contact, c.customerType, c.name, c.url FROM Customer c WHERE (c.name = ?) |
| 0.004 | 0.963 | 213 |
→ | INSERT INTO Customer (ID, address, comment, contact) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) |
| 0.002 | 0.499 | 187 |
→ | SELECT Nextval('Address_cseq') |
| 0.088 | 0.176 | 2 |
→ | SELECT CustomerType.ID, CustomerType.name FROM CustomerType CustomerType WHERE (CustomerType.name = ?) |
| 0.005 | 0.164 | 30 |
JMX
The Profiler instantiates a JMX bean with type `Profiler'.