By setting Enable Management Property (JAVA) or Instrumented Property (NET) it is possible to monitor applications to help in the 'diagnosis' of performance problems and find solutions.
As it runs, the application shows information in a console, such as variables related to the connection pool, users, cursors, statements, procedures, etc.
In Java, management it is implemented using JMX standard, which allows using any of the JMX monitors existing in the market to visualize the information. In .NET, it is implemented using WMI standard, which allows also using any of the WMI monitors existing in the market.
This document details the information shown in any JMX o WMI monitor after configuring the properties mentioned previously.
There are two large "packs" implemented in order to monitor an application using WMI (.NET applications) or JMX (java applications).
This pack indicates the application current behavior. It is mainly useful in production, to establish when you have to make certain application adjustments to improve its performance.
It may be also useful to find possible errors such as lost connections, locked users, etc. Besides, the connection pool and the data cache can be monitored using the information provided by this pack.
This pack was mainly conceived to be used before the application release, although it can be also used in production. It provides information related to the procedures and the SQL statements executed by the application.
It allows identifying the most executed procedures or statements, the ones taking more time, etc.
Within these two large packs, the information is grouped in smaller packs indicating the type of information to be shown.
Prior to go on with this article, we recommend the following reading: Connection Pooling.
The following are the packs within the management pack and the information shown by each one of them:
This pack is only shown when executing 3-tier applications with GeneXus application server.
DataStoreRequestCount |
It indicates the number of times a server class implementing the access to a data store was call. |
RemoteProcRequestCount |
It indicates the number of times a server procedure was called. |
StartTime |
It indicates the time when the server was started. |
TrnRuleRequestCount |
It indicates the number of times a server class implementing the rules of a transaction was called. |
UserCount |
It indicates the number of users that are currently executing the application. |
shutDown |
It allows to shut down the applications server. |
ApplicationName (Java only)
This pack is only shown when executing a 3-tier application with GeneXus application server or a Web application.
In case of a 3-tier application, there will be as many of these packs as 'Application Names' in the server.
UserCount |
It indicates the number of users that are currently executing this ApplicationName. |
Data Store
There will be as many of these packs as Data Stores defined in the 'Application Name'
ConnectAtStartUp |
It indicates the value of the DataStore Property: Connect to Startup. |
JDBCDriver |
It indicates the value of the JDBC driver class. |
JDBCURL |
It indicates the value of the URL used to get connected to the base. |
MaxCursors |
It indicates the value of the property: 'Maximum cached cursors per Connection'. |
Name |
It indicates the Data Store name. |
PoolEnabled |
It indicates whether the pool is enabled or not. |
PoolRecycleEnabled |
It indicates if the pool is recycled with specific timeouts. |
PoolRecycleMin |
It indicates the specific timeout in minutes between each pool connections recycling. |
UserName |
It indicates the user to get connected to the DBMS. |
RecyclePool |
It allows recycling all the pool connections. |
ConnectionPool (Java only)
There will be one for each Data Store.
ConnectionCount |
It indicates the current number of open pool connections. |
AverageRequestPerSec |
It indicates the average number of times a connection to the pool has been requested per second. |
AverageUserWaitingTime |
It indicates the average time in milliseconds while the users were waiting for a connection. |
NotificationEnable |
It indicates whether the pool notification system is enabled or not. This value can be modified. |
FreeConnectionCount |
It indicates the number of free pool connections. |
Size |
It indicates the maximum size of the pool. This value can be modified. The change is taken into account only if a value higher than the current one is indicated. It matches up with the 'Size' GeneXus model property. |
BeforeNotificationWaitingTime |
It indicates the time in milliseconds while a user can be waiting for a connection before a notification is sent, provided the notifications are enabled. This value can be modified. |
UserMaxWaitingTime |
It indicates the maximum time in milliseconds while a user has been waiting in the pool. |
CreatedConnectionCount |
It indicates the number of connections that have been created since the server was started (This number does not match the current number of connections, since the connections may have been recycled). |
DroppedConnectionCount |
It indicates the number of connections that have been dropped because they had errors. |
RecycledConnectionCount |
It indicates the number of connections that were recycled. |
RequestCount |
It indicates the number of times a connection was requested to the pool. |
WaitingUserCount |
It indicates the number of users that are currently waiting for the pool. |
WaitedUserCount |
It indicates the total number of users that have waited for the pool so far |
LastRequestTime |
It indicates the time when a connection to the pool was requested for the last time. |
UnlimitedSize |
It indicates if the pool has unlimited size. |
Recycle |
It allows recycling all the pool connections. |
DumpPoolInformation |
It sends all the pool current information to a file. These files are saved in the current directory of the application server, and the name of the file is like Pool_20060822131248.xml |
Notifications
A notification has an Id and a description. The following ones are available in GeneXus:
Id |
Description |
com.genexus.managment.fullpool |
The Connection Pool does not have available connections
It is sent when a user remains waiting for the pool. |
com.genexus.managment.longtimeuserwaiting |
User waiting a connection for a long time
It is sent when a user remains waiting for the pool for a time longer than the time indicated in the property: BeforeNotificationWaitingTime. |
There will be as many entries as connections in the pool.
PhysicalId |
It indicates the Id of the physical connection in the DBMS. It is useful to identify the connection when using a DBMS tool to visualize the connections. |
Error |
It indicates if the connection had an error.
Possible values: true or false |
LastSQLStatementEnded |
It indicates if the last statement was already executed.
Possible values: true or false. |
Id |
It indicates the connection logic Id. |
Available |
It indicates whether this connection is available to be assigned (true) or not.
Note: A connection is available to be assigned to another user if the following conditions are matched:
- OpenCursorCount = 0
- UncommitedChanges = false
|
LastUserId |
It indicates the Id of the last user that used the connection. |
RequestCount |
It indicates the number of request in this connection. |
LastObject |
It indicates the last object used by the connection.
E.g.: if the last executed object was the client transaction against the default data store, this variable will have the following value: tclientes_default |
OpenCursorCount |
It indicates the current number of open cursors in the connection. |
LastSQLStatement |
It indicates the last statement already executed or being executed by the connection. |
LastAssignedTime |
It indicates the time when the connection was assigned to a user for the last time. |
CreateTime |
It indicates the time when the connection was created. |
LastSQLStatementTime |
It indicates the time when the last statement of the current connection was executed. |
UncommitedChanges |
It indicates if the connection has open UTLs. |
Disconnect |
It allows disconnecting a connection. |
DumpConnectionInformation |
It sends all the connection current information to a file. These files are saved in the current directory of the application server, and the name of the file is like Connection_10350679_20060822132921.xml. |
ConnectedTime |
It indicates the time when the user got connected. |
Id |
It indicates the user Id. |
IdleSeconds |
It indicates the time in seconds while the user is idle. |
IP |
It indicates the user IP. |
LastConnectionId |
It indicates the Id of the last connection used by the user. |
LastSQLStatement |
It indicates the last SQL statement executed by the user. |
LastSQLStatementTime |
It indicates the time when the last SQL statement was executed. |
LastObject |
It indicates the last object that accessed the base executed by the user. |
WaitingForConnection |
It indicates if the user is waiting for a connection in the pool. |
WaitingForConnectionTime |
It indicates how long the user has been waiting for a connection in the pool. |
Disconnect |
It allows disconnecting the user. |
StorageSize |
It indicates the maximum size of the storage in bytes. |
CurrentSize |
It indicates the current size in bytes. |
Enabled |
It indicates if caching is enabled. |
TimeToLive |
|
HitsToLive |
|
SQLSentence |
It indicates the key of the cacheitem: the sql sentence. |
Paremeters |
It indicates the parameters of the cached sentence. |
Size |
It indicates the total size (in bytes) of the cacheitem. |
HitCount |
It indicates the number of hits on this cacheitem. |
ExpiryHitsCount |
It indicates the number of expiry hits on this cacheitem. |
ExpiryTime |
It indicates the expiry time of the cacheitem. |
TimeCreated |
It indicates the time when the sentence was cached. |
MaxNumberOfConnections |
It indicates the maximum number of connections. |
NumberOfAvailableConnections |
It indicates the number of available connections in the pool. |
NumberOfConnectionsInUse |
It indicates the number of connections that are being used. |
NumberOfRequestsWaiting |
It indicates the number of requests for a new connection that are waiting. |
There will be one for each connection in the HTTPPool
Host |
It indicates the host to which each connection is connected. |
Port |
It indicates the port to which each connection is connected. |
The following are the packs within the performance pack and the information shown by each one of them:
It provides information on the SQL statements executed by the server. There are two types of data store providers for 3-tier applications (remote -RemoteDataStoreProviders- and local -DataStoreProviders-). The remote ones are called from the client.
StoredProcedureCount |
It indicates the number of stored procedures that were executed. |
TotalSQLStatementCount |
It indicates the total number of statements that were executed so far. |
DeleteSQLStatementCount |
It indicates the number of Delete statements that were executed. |
SQLCommandCount |
It indicates the number of SQL statements that were executed from GeneXus SQL command. |
InsertSQLStatementCount |
It indicates the number of Insert statements that were executed. |
SelectSQLStatementCount |
It indicates the number of Select statements that were executed. |
UpdateSQLStatementCount |
It indicates the number of Update statements that were executed. |
Operations
DumpDataStoresInformation |
It sends all the current information of the SQL statements that were executed.
- The file remains in the applications server current directory with a name of the following type: RemoteDataStoreProviders_20050906175234.xml (or DataStoreProviders_20050906175234.xml, depending on whether you are working on the remotes or not).
|
It provides information on the SQL statements that were executed by a specific object. There are two types of data store providers for 3-tier applications (remote -RemoteDataStoreProvider- and local -DataStoreProvider-). The remote ones are called from the client.
StoredProcedureCount |
It indicates the number of stored procedures that were executed. |
TotalSQLStatementCount |
It indicates the total number of statements that were executed so far. |
DeleteSQLStatementCount |
It indicates the number of Delete statements that were executed. |
SQLCommandCount |
It indicates the number of SQL statements that were executed from GeneXus SQL command. |
InsertSQLStatementCount |
It indicates the number of Insert statements that were executed. |
SelectSQLStatementCount |
It indicates the number of Select statements that were executed. |
UpdateSQLStatementCount |
It indicates the number of Update statements that were executed. |
Operations
DumpDataStoreInformation |
It sends all the current information of the SQL statements executed by the object to a file. The file has a name of the following type: DataStoreProvider_aaltprod__default20050906180316.xml. |
It provides information of a specific SQL statement. There are two types of statements for 3-tier applications (remote and local). The remote ones are called from the client.
AverageTime |
It indicates the average time in milliseconds taken to execute the statement. |
BestTime |
It indicates the best time in milliseconds taken to execute the statement. |
NotificationEnabled |
It indicates whether the notifications system is enabled for the statement.
This value can be modified. |
BeforeNotificationWaitTime |
It indicates the time in millisecond while a statement can be waiting for execution before a notification is sent, provided the notification system is enabled.
This value can be modified. |
SQLStatement |
It indicates the SQL statement. |
Count |
It indicates the number of times a statement was executed (it include cached results). |
LastExecute |
It indicates the time when the statement was executed for the last time. |
TotalTime |
It indicates the total time in milliseconds taken to execute all the statements. |
WorstTime |
It indicates the worse time in milliseconds taken to execute the statement. |
Notifications
Id |
Description |
com.genexus.performance.poorperformance |
Poor performance in SQLStatement <SQLStatement>
It is sent when a statement takes more time than the time indicated in the property: MaxTimeForNotification. |
It provides information on the procedures that were executed.
AverageTime |
It indicates the average time in milliseconds taken to execute the procedure. |
BestTime |
It indicates the best time in milliseconds taken to execute the procedure. |
Count |
It indicates the number of times a procedure was executed. |
LastExecute |
It indicates the time when the procedure was executed for the last time. |
TotalTime |
It indicates the total time in milliseconds taken to execute all the procedures. |
WorstTime |
It indicates the worst time in milliseconds taken to execute the procedure. |
See Also
Monitoring GeneXus applications