Guest User

While using the WAS7 db2 with as/400, but could not see any query.

############################################################################

  1. Jennifer 4.5 Agent Configuration File :
  2. File Name : jennifer.conf
  3. Last Updated: 2010.11.18
    ############################################################################
  4. Configuration File Note
    #
  5. 1. All attributes are written in ‘KEY = VALUE_string’ format.
  6. 2. Comment are initialized with ‘#’. If ‘#’ character is used in the
  7. middle or end of a line, comment is not enabled.
  8. 3. KEY string cannot contain any empty space.
  9. 4. Empty space is allowed in VALUE string only.
  10. 5. If two or more line is used, attach ‘\’ character at the end of each
  11. line.
  12. 6. If VALUE string includes ‘\’ character in the line, please use ‘\\’
  13. instead of ‘\’.
  14. 7. Due to item 6, in Windows environment, directory path is separated
  15. with ‘\\’ instead of ‘\’.
  16. You may also use ‘/’ as you would in Linux environment for Windows
  17. as well. We recommend that you
  18. use ‘/’ in windows environment as well.
  19. (example)logfile = C:\temp\log.txt <—- WRONG
  20. logfile = C:\\temp\\log.txt <—- CORRECT
  21. logfile = C:/temp/log.txt <—- CORRECT
  22. 8. Most of the option items listed below are updated in real-time.
  23. You do not need to restart the server/service
  24. after reconfiguring these values. Option items that are not updated
  25. in real-time are indicated
  26. with ‘[RESTART]’ symbol. Please restart the server/service after making
  27. chages to the values for those options.
    ############################################################################
  1. Set location of the Agent License Key file. LicenseKey are IP Address
  2. specific.
  3. Caution: In Windows environment, please use ‘/’ instead of ‘\’ when
  4. inputting directory path.
  5. Caution: We recomend inputting full directory path. path for this value.
    license_filename = /qibm/userdata/websphere/jennifer45/agent/lic/license.txt
  1. Set location for the log file outputted by Jennifer Agent.
  2. Caution: In Windows environment, please use ‘/’ instead of ‘\’ when
  3. inputting directory path.
  4. Caution: We recomend that you input the full directory path for this
  5. value.
    logfile = /qibm/userdata/websphere/jennifer45/agent/logs/jennifer.log
  1. Option to separate the log file by date. When this option is enabled,
  2. each log file will only contain one day worth log information and
  3. appropriate file name will be given to each # log file according to
  4. the log date.
    enable_logfile_daily_rotation = true
  1. Set the name for individual Jennifer Agents to be installed in each WAS
  2. machine. Jennifer Server identifies its Agents with this name. The Agent
  3. name must be exactly 3 characters. We recommend that Jennifer Agents’ name
  4. follow this convention (example: W11, W12, W13, up to W99).
  5. Caution: when the Agent name is changed, the location where the agent
  6. data is stored is also changed. Thus, we recommend that administrator
  7. carefully select an approriate name for each agent and stick with it.
    agent_name = W11
  1. Set a TCP port for Jennifer Agents installed in each machine that
  2. will be used to recieves requests from Jennifer server.
  3. If there are more than one Agent installed in a machine, use unique
  4. TCP port for each agent for that machine since a TCP port cannot be used
  5. by more than one agent per machine. If there is only one Agent per machine,
  6. each machine can use the same TCP port. We call this ‘Agent TCP Port’.
    agent_tcp_port = 7750
  1. Set the IP address for Jennifer Server.
  2. example: udp_server_host = 192.168.0.100
    udp_server_host = xxx.xxx.xxx.xxx
  1. Set the UDP port that Jennifer server use to listen for runtime data. Request
  2. arrival notice and service completion notice is transmitted to Jennifer Server
  3. via this port.
  4. We call this ‘Runtime Port’.
    server_udp_runtime_port = 6901
  1. Set the UDP port that Jennifer server use to listen for summary data. TPS,
  2. CPU (wmond), memory and other statistical data is trasmitted to Jennifer Server via
  3. this port. We call this ‘Summary Port’.
    server_udp_listen_port = 6902
  1. Set the UDP port that Jennifer server use to listen for profile data. Executed
  2. service profile information is trasmitted to Jennifer server via this port.
  3. We call this ‘Profile Port’.
    server_udp_lwst_call_stack_port = 6703

#—————————————————————————————————————

  1. This option is the main control switch for Jennifer. Jennifer is enabled only
  2. when the following value is set as ‘true’. If the value is set as ‘false’,
  3. Jennifer will not run any type of trace against the application.
    enable = true
  1. Jennifer checks for file configuration changes every 30 seconds. We recommend
  2. the default value of 30 seconds for this setting.
    config_refresh_check_interval = 3000
  1. Set packet size for X-View transaction profile data.
  2. 64k is maximum value allowed.
  3. Depending on the OS, the maximum UDP packet size may vary.
  4. Caution: Consider the maximum UDP packet size allowed by network equipments such as
  5. switch hub, or firewall between Jennifer Agent and Server.
  6. example: if 32k, (1024 * 32) – 11byte) = 32757 byte.
  7. 11 byte is for profile packet header data.
    xview_profile_udp_packet_size = 32757
  1. Service-Dump is triggered when the number of active service in queue
  2. exceeds value defined below.
  3. Administrator should consider the site’s needs befor setting this value
    enable_dump_triggering = true
    number_of_dump_trigger = 90
    jdump_dir = ./
  1. If the enable_dump_trigger is enabled, define the dump interval time
  2. to prevent unnecessarily frequent dumps.
    dump_trigger_sleep_interval = 180000
  1. Set the maximum number of thread to be used when processing TCP
  2. socket request from Jennifer Server.
  3. [RESTART] Please restart the server for the changes to take effect.
  4. Normally, we recommend value ‘5’ for this setting.
    number_of_tcp_workers = 5
  1. Log files are created if the response time exheeds defined value below for application, SQL, or
  2. TX (external transaction between WAS and interoperative transaction system such as CICS, Tuxedo, or remote EJB)
  3. Do not set these values too low since that will cause Jennifer to produce too much log files.
    app_bad_responsetime = 30000
    sql_bad_responsetime = 20000
    tx_bad_responsetime = 10000
  1. Sometimes, RequestDispatcher’s forward() can loop infinitely, causing JVM
  2. to experience StackOverFlow then self-terminate.
  3. For example, when an error occurs, the forward request is typically transfered
  4. to a specific error page. If such error page does not exist, RequestDispatcher’s
  5. forward() may loop infinitely. Following option limits HttpServlet.service()
  6. call so that the recurssive call has a maximum loop number cap to prevent
  7. infinite loops.
  8. Using JSP Tag library or JSP are also counted. A high number of
  9. loop is recommended for this option.
  10. default: 50000
    recurrsive_call_max_count = 50000
  1. Following option must be enabled to retrieve JDBC/SQL trace information.
  2. If this option is enabled, please refer to Installation guide and define
  3. the JVM Bootclass path in jennifersys.jar file.
  4. default value is false. If enabling JDBC/SQL trace is causing any problem,
  5. please turn off the trace and contact jennifersoft technical support team.
    enable_jdbc_sql_trace = true

###############################################################################

  1. NOTE: JDBC SQL Configuration Types
    ###############################################################################
  2. [Type 1] JNDI & DataSource
  3. When utilizing JNDI lookup through DataSource, SQL is automatically traced
  4. without any special configuration.
    #
  5. InitialContext ctx = new InitialContext();
  6. DataSource ds = (DataSource)ctx.lookup(“java:comp/env/jdbc/datasource”);
  7. Connection conn = ds.getConnection();

enable_jdbc_datasource_trace=false

#jdbc_datasource_class = org.apache.tomcat.dbcp.dbcp.BasicDataSource
#jdbc_datasource_class = weblogic.jdbc.common.internal.RmiDataSource
jdbc_datasource_class = com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource

  1. Form of code that fetches DataSource from Conext class may sometimes experience problem while tracing SQL.
  2. In this case, please set the following option to ‘true’.
  3. CAUTION: When WAS is (re)started with following option enabled, WAS may experience EJB realted Conext Cast Exception error.
  4. default value is false.
  5. enable_wrap_context_jdbc_trace = true
    #
    #naming_context_class = org.apache.naming.NamingContext
    naming_context_class = com.ibm.ws.naming.jndicos.CNContextImpl
  1. If you want to debug the call-path of the connection-open,
  2. the below option must be set into ‘true’.
  3. default value is false.
    #debug_connection_open=true

#==================

  1. [Type 2]: This type Uses DriverManager.getConnection() to get a database connection.
  2. While tracing JDBC SQL, if DriverManager.getConnection() is used, additoinal
  3. parameters can also be configured.
  4. example: JEUS 4.0 or Apache DBCP Connection Pool.
  5. Set prefixes of JDBC URL string. If you want to set for multiple string, use “,” to distinguish each string.
  6. -———-
  7. (example 1) Apache DBCP JDBC Connection Pool
  8. conn = DriverManager.getConnection(“jdbc:apache:commons:dbcp:/poolname”);
  9. ==>user_defined_jdbc_connectionpool_prefixes=jdbc:apache:commons:dbcp

#user_defined_jdbc_connectionpool_prefixes=jdbc:oracle

#==================

  1. [Type 3] If user defined (Not provided by WAS or DB vender) connection pool is
  2. used, define the obtain-connection (ex: getConnection()) and release-connection
  3. (ex: freeConnection()). When using multiple strings, use “;” to distinguish
  4. one string from another.
  5. -———-
    #jdbc_connection_get = db.DBConnectionManager.getConnection(String);db.DBConnectionManager.getConnection(String,long)
    #jdbc_connection_close = db.DBConnectionManager.freeConnection(String,Connection)
    #jdbc_connection_justget = oracle.apps.fnd.common.Context.getJDBCConnection()
    #==================
  6. [Type 4] If user defined (Not provided by WAS or DB vender) connection pool is
  7. used, define the Driver & Driver caller
  8. -———-
    #jdbc_driver_caller = db.MyConnPool.makeConnection
    #debug_jdbc_driver_class = true
    #jdbc_driver_class = oracle.jdbc.driver.OracleDriver

###############################################################################

  1. Basic SQL/JDBC information fetches JDBC requests from Servlet/JSP Thread only. In order to fetch JDBC/SQL
  2. information from Non-Servlet/JSP Thread following option must be enabled.
  3. Caution: EJB CMP Entity Bean is not supported. Please use value ‘false’ when
  4. EJB CMP Bean is implement with Jennifer JDBC trace Type 3.
  5. default value for this optoin is ‘false’.

enable_non_servlet_thread_jdbc_trace = true

  1. In Oracle JDBC, If any application casts original jdbc classes,
  2. (example: ‘java.sql.Connection:java.sql.Statement:java.sql.ResultSet’) to specific oracle vendor classes
  3. (example: ‘oracle.jdbc.OracleResultSet’), the application may experience CastExceoption Error.
  4. Example in Oracel 9i: CLOB clob = ((OracleResultSet)rs).getCLOB(i);
  5. In the above scenario, we recommend that administrator update the Oracle ODBC driver to 10g.
  6. If that is not possible, below option must be set ‘true’ to enable jdbc oracle dependency
  7. default: ‘false’

enable_jdbc_oracle_dependency_used = true

  1. JDBC Vendor Wrapping
  2. since JENNIFER4.5 default true
  3. can use “enable_jdbc_oracle_dependency_used” with “enable_jdbc_vendor_wrap”

enable_jdbc_vendor_wrap=true

  1. If you want to debug the vendor-wrapping(“enable_jdbc_vendor_wrap=true”),
  2. set the options as following.
    #debug_vendor_wrap = true
    #vendor_wrap_test_sql = select * from tab
  1. CallableStatement/PreparedStatement/Statement/ResultSet can be manually enable or disable.
  2. NOTE: This option only takes effect when ‘enable_jdbc_sql_trace’ is ‘true’.
  3. PS: enable_jdbc_resultset_trace is meaningful only when one or more of ‘enable_jdbc_XXXXstatement_trace’ value is ‘true’.
  4. default is ‘true’ for all.
    #enable_jdbc_callablestatement_trace = true
    #enable_jdbc_preparedstatement_trace = true
    #enable_jdbc_statement_trace = true
    #enable_jdbc_resultset_trace = true
    #enable_jdbc_databasemetadata_trace = true
  1. If Oracle
  2. “grant select_catalog_role to dbuser”
  3. enable_dbstat=false
  1. This option enables warning message if the number of SQL query and the resulting rs.next() fetched exceeds defined amount.
  2. If the fetched rs.next() count is greater than defined value, error message, “TOO MANY ResultSet FETCHED”, is displayed.
  3. Default value for this option is 10,000.
    jdbc_resultset_warning_fetch_count = 10000
  1. Once this option is enabled, If SQLException occurs for JDBC related processes (example: stmt.executeQueue()),
  2. the exception detail is logged and stored in Jennifer log file.
  3. CAUTION: Since SQLException falls under application’s business logic, SQLException does not always indicate an actual error.
  4. default value is for this option is ‘false’.
  5. NOTE: SQLExeption is always traced. This option controls the logging of the SQLException only.
    enable_sql_error_trace = false
  1. If the JDBC Connection/Statement/ResultSe is not closed properly,
  2. this option traces and finds the location and the method used to produce the the applicable JDBC object by applying Stack Trace.
  3. CAUTION: since Stack Trace is refreshed every time Connection is refreshed, enabling this option may adversely effect system performance.
  4. enable this option only when necessary.
    enable_jdbc_stack_trace = true
  1. If LWST is enable, LWST’s STACK TRACE is typically enabled as well,
  2. But in some cases, entire STACK TRACE may not viewable even with LWST enabled.
  3. In this case, Please enable the following option to gather and display Full STACK TRACE information.
  4. CAUTION: enabling this option may increase system load and adversely effect system performance.
  5. Please use this option only when necessary.
  6. default value for this option is false.
    #enable_jdbc_connection_fullstack_trace = false
    #enable_jdbc_callablestatement_fullstack_trace = false
    #enable_jdbc_preparedstatement_fullstack_trace = false
    #enable_jdbc_statement_fullstack_trace = false
    #enable_jdbc_resultset_fullstack_trace = false

#since: v3.2.5.0
#default value is false
#ignore_rollback_uncommited_error = true

  1. We cannot see the value of the URL for requests submitted via HTTP Post method. In this case,
  2. If the designated HTTP request key value is inputted, the request values will be displayed along with jennifer server’s Active Service Index.
  3. For example, when set with desinated value ‘http_post_request_tracking_list=txid,txid2,txid3’
  4. HTTP request key value, txid, txid2, txid3 will be displayed along with index as below example.
  5. /somewhere/myapp.jsp+{key1=a&key2=b}
    #http_post_request_tracking_list = txid,txid2,txid3
  1. If the system structure is set to receiving request from servlet (example: Struts or Control Pattern)
  2. Distinguising different requests based on URL is not possible. In this case, if there exists HTTP request value originating in applicable framework,
  3. the key value can be designated and attached to the URL to distingtuish one URL from another.
  4. For example, when “key1,key2” is designated, jennifer display the statistics in following format.
  5. uri+<key1=a&key2=b>
  1. the length of the value can be defined.
  2. ex) key1:5 => req.getParameter(“key1”).substring(0,5)
    #url_additional_request_keys = key1,key2
  1. Depending on the situation, request for POST method such as request.getInputStream() can be directly
  2. opened and processed within the application.
  3. In this case, if url_additional_request_keys or http_post_request_tracking_list is used, request.getInputStream() may produce null, causing application
  4. to funciton incorrectly. Please use the following option to ignore url_additional_request_keys/http_post_request_tracking_list for this type of application by
  5. defining prefix in the URL.
    #ignore_url_post_request_parsing_prefixes = /kesa.web,/insa/x_servlet
  1. If you would like the WAS server to directly service Static Content instead of using web server,
  2. you may want to exclude static content from Servlet/JSP statistics.
  3. Please define the postfix in the below option to exclude them from Servlet/JSP Stats.
  4. Use “.” or blank space or “,” when entering more than one postfixes.
  5. NOTE: Static Contents will monitored under active service index.
    ignore_url_postfix = .gif .GIF .jpg .JPG .zip .html .HTML .txt .css .js .swf .htc .HTC .png .PNG

#ignore_url=/board/check.jsp

  1. For the application that the JDBC trace is not necessary (example: batch operation), register URL
  2. in the option below so that JDBC trace is disabled.
  3. Use “,” when entering more than one URL.
    #ignore_jdbc_trace_url =
  1. Set the tpmC (transaction per minute, Type C) for the system. Enable this
  2. option to see the applicable system’s CPU time in tpmC unit.
  3. cpusum * approximate_tpmc_on_this_system / 60 = app cpu(tpmC)
  4. CAUTION: The tpmC may not be accurate.
    approximate_tpmc_on_this_system = 30000
  1. Active Serivce catagories are currently separated into different diplay color accoridng to
  2. its response time. By fault, there are 4 response time category: 0~1 sec, 2~3 sec, 3~8 sec, and 8+ sec.
  3. The reponse time range can be adjusted according to custoemr specification.
  4. Active Responsetime interval : 0-1, 1-3, 3-8, 8+ seconds
    active_graph_interval = 0,1000,3000,8000
  1. Main control for PLC.If the number of active service exceeds the defined amount, the incoming
  2. requests wil be rejected to prevent service queuing, which may cause system to crash. Please set whether PLC will be used
  3. the number of maximum active service count.
    set_limit_active_service = false
    max_num_of_active_service = 100
  1. When a request is rejected by PLC, User need to define how Jennifer should handle the rejected requests.
  2. Error message can be send via string message or it can be redirected to a html page.
  3. Set how the reject message should be handled.
  4. NOTE:request_reject_type=[ message | redirect ]
  5. NOTE: jsp page such as error.jsp is not recommended since the reject may repeat there.
    request_reject_type = message
    request_reject_message = Current workload is high. Please, try again later!
    request_reject_redirect_url = /error.html
  1. For systems that use cookie frequenly, installing jennifer may cause cookie Overflow.
  2. Please do not enable this option unless necessary.
  3. enabling this option diables jennifer’s ability to estimate Concurrent User count.
  4. default value for this option is false
  5. since v3.02 – fix10
    #hotfix_remote_address_for_wmonid = true

#if specify this, use req.getHeader(key) instead of req.getRemoteAddr()
#remote_address_header_key=

###################################################################################

  1. LWST CONFIG
    ####################################################################################
  2. If you want to log the class instrumentation of LWST
  3. set the “lwst_debug” option into true.
    #@default: false
    #lwst_debug=true

##############################################################

  1. If “javax.servlet.GenericServlet” is loaded to JVM, Jennifer Agent will be initialized.
    agent_boot_class=javax.servlet.GenericServlet
  1. The “mysys.TestServlet” is a start point of http service process.
    #http_service_class = mysys.TestServlet

##############################################################
#tx_server_class=
#tx_server_super=
#tx_server_interface=javax.ejb.SessionBean
#tx_server_prefix=
#tx_server_postfix=
#tx_server_ignore_prefix=com.ibm
#tx_server_target_method=
#tx_server_ignore_method=getSessionContext;setSessionContext;ejbCreate;ejbActivate;ejbPassivate;ejbRemove
#tx_server_access_method=public,protected,private,none
#tx_server_ntype=CLASS
#tx_server_using_param=true

#lwst_txserver_method_using_param=org.test.Test.n(String)
#lwst_txserver_method_using_return=org.test.Test.n(String)

#tx_naming_class=
#tx_naming_super=
#tx_naming_interface=
#tx_naming_prefix=
#tx_naming_postfix=
#tx_naming_ignore_prefix=
#tx_naming_target_method=
#tx_naming_ignore_method=
#tx_naming_access_method=public,protected,private,none
#tx_naming_ntype=CLASS
#tx_naming_using_param=false
#tx_naming_using_return=false

##############################################################

#tx_client_class=
#tx_client_super=javax.rmi.CORBA.Stub
#tx_client_interface=
#tx_client_prefix=
#tx_client_postfix=
#tx_client_ignore_prefix=com.ibm
#tx_client_target_method=
#tx_client_ignore_method=remove;create
#tx_client_access_method=public,protected,private,none
#tx_client_ntype=CLASS
#tx_client_using_param=true

#lwst_txclient_method_using_param=org.test.Test.n(String)
#lwst_txclient_method_using_return=org.test.Test.n(String)

##############################################################
#profile_class=
#profile_super=
#profile_interface=
#profile_prefix=
#profile_postfix=
#profile_target_method=
#profile_access_method=public,protected,private,none
#profile_ignore_prefix=
#profile_ignore_postfix=
#profile_ignore_method=
#profile_buffer_size=20000

profile_default_on=false
profile_method_max_byte = 32000
profile_method_min_byte = 0

#profile_call=java.lang.Thread.sleep;*.wait
#lwst_profile_method_using_param=foo.XBoardVO.setOid(String);foo.XBoardVO.get(String)
#lwst_profile_method_using_return=foo.ATomServlet.getActName(String,String)
#lwst_profile_method_param_limit = 100

##############################################################
#custom_trace_class=
#custom_trace_super=
#custom_trace_interface=
#custom_trace_prefix=
#custom_trace_postfix=
#custom_trace_ignore_prefix=
#custom_trace_target_method=
#custom_trace_ignore_method=
#custom_trace_access_method=public,protected,private,none
#custom_trace_param_type=all
#custom_trace_adapter_class_name=
#custom_trace_adapter_class_path=lwst40.custom.jar

##############################################################
#liveobject_class=
#liveobject_super=
#liveobject_interface=
#liveobject_prefix=
#liveobject_postfix=

########################################################################

  1. If the target port called ‘1521’ has opened (Tcp session is estabilished),
  2. JENNIFER logs the stack of working thread.
  3. lwst_trace_remote_port=1521
  4. lwst_trace_local_port=

#socket_simple_trace = false

########################################################################
#lwst_collection_minimum_monitoring_size = 3000
#lwst_collection_auto_stacktrace_size = 100000

########################################################################
#WebSphere7
using_adaptable_http_agent=true
http_agent_classpath=/qibm/userdata/websphere/jennifer45/agent/jennifer.http.jar

#WebSphere7 ODR
#enable_websphere_odr=true

sysprof=As400

agent_boot_class=javax.servlet.GenericServlet

jdbc_connection_justget = com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(String, String);com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(long, boolean);com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection()

Khalid Saeed

You are not allowed to monitor the file/socket under the AS/400. For this reason, you will see a log every time you apply the debug_connection_open=true at the agent option and open the connection. Please find the stack and apply it into the stack.