Académique Documents
Professionnel Documents
Culture Documents
Introduction
This document provides general information to perform a basic or medium level of Engine troubleshooting. Among
the provided information you will find: description and details of Engine logs, tools for gathering troubleshooting
data, several sources of information depending on the nature of the problem, troubleshooting configurations,
debugging settings, sets of information that should be analyzed or collected in case of an incident, and more.
The type of issue within the BPM Engine can vary widely. Depending on each case, different sets of information
might be required. That is why this document aims at the most common required pieces, which are enumerated
below:
This document describes these different sets of information and provides instructions on how to obtain them.
Additionally, it contains a brief section on how to tune some engine settings to address typical performance issues
and a section on debugging flags.
Table of Contents
1. Collecting Basic Engine Information ....................................................................................4
1.1. Engine version ...................................................................................................................4
1.2. Database and Database driver full version ........................................................................5
1.2.1. Database version.........................................................................................................5
1.2.2. Database driver full version .........................................................................................5
1.3. Directory full version...........................................................................................................5
1.4. Application Server full version ............................................................................................5
1.4.1. WebLogic Server full version .......................................................................................5
1.4.2. WebSphere Server full version ....................................................................................6
1.5. Deployment topology .........................................................................................................6
1.6. Operating system version...................................................................................................6
1.7. Basic Info Recommendations.............................................................................................7
2. Engine Logs ............................................................................................................................7
2.1. Description of the Engine Logs ..........................................................................................7
2.1.1. A Log entry ..................................................................................................................7
2.1.2. To-Do Item messages .................................................................................................8
2.1.3. Log files location..........................................................................................................8
2.1.4. Log files description.....................................................................................................9
2.1.5. Specifying an alternative Log location .........................................................................9
2.2. Configuring Log size and Severity level ...........................................................................10
2.2.1. Configuring the Log settings in the Process Administrator ........................................10
2.2.2. Enabling Asserts in the JVM that runs the BPM Engine ............................................10
2.2.2.1. Enabling Asserts in the Standalone Engine............................................................10
2.2.2.2. Enabling Asserts in the WebLogic Server...............................................................11
2.2.2.3. Enabling Asserts in the WebSphere Server............................................................12
2.2.3. Restarting the BPM Engine .......................................................................................13
2.2.3.1. Start output of the WebLogic Server.......................................................................13
2.3. Using LogViewer (in graphical environments) ..................................................................14
2.4. Using LogReader (in character terminals)........................................................................14
2.4.1. Windows logReader.bat script ...................................................................................15
2.4.2. Unix logReader.sh script............................................................................................15
2.5. Additional Logs related to the Engine...............................................................................15
2.5.1. WebLogic Server Logs ..............................................................................................15
2.5.2. WebSphere Server Logs ...........................................................................................16
3. Project Debugging................................................................................................................16
3.1. logMessage method.........................................................................................................16
3.2. Meaningful logging ...........................................................................................................16
4. Obtaining Affected Projects.................................................................................................16
4.1. Obtaining a Project Export with all libraries included........................................................17
4.2. Recovering Process Versions from the Process Administrator ........................................17
5. Obtaining Information from the Engine DB ........................................................................19
5.1. Obtaining all entries in the table of Pending Execution Items ..........................................19
5.1.1. To-Do Item Types......................................................................................................19
5.2. Obtaining affected entries in the table of Instances and Instance Events ........................19
5.2.1. Instance States..........................................................................................................20
Oracle Proprietary and Confidential
Another way of obtaining the Engine version is opening the Admin Center About page which is shown below. Note
that while this is the version of the BPM installation, the Engine version could be different due to incorrectly installed
upgrades or fixes. So, when in doubt, it is a good idea to check if both build numbers match.
<Jan 18, 2008 4:38:39 PM CST> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server
2. Engine Logs
2.1. Description of the Engine Logs
The Engine logs are composed of a fixed number of files with a given maximum size. In order to maintain the log
size within this constrains, when all log files have been written the new log entries will be written to the oldest file in
a round-robin fashion. This limit on the amount of log stored translates into a limited time frame of log info. We will
address how to change this amount in section 2.2.1. Configuring the Log settings in the Process
Administrator.
While the content of the files is text, they are not easily readable without the help of the LogViewer or LogReader.
We will briefly cover them in sections 2.3. Using LogViewer and 2.4. Using LogReader.
Message
Time
Date
Application
Module
Thread
Indicates the level of severity of the message. The possible values, in decreasing order of severity,
are: FATAL, SEVERE, WARNING, INFO, DEBUG and TRACE. Note that TRACE is an internal
value used in special occasions to dump stack traces of an Engine thread (this value is not
available to the PBL logMessage method).
Text of the entry.
Time when the entry was generated. Note that the definition of the value is in seconds. Also note
that the date is stored in GMT-0 format and by default it is converted to the local time zone of the
computer where the LogViewer or LogReader is running. The LogViewer time zone can be
configured in the Preferences dialog.
Date when the entry was generated.
The application that sent the message. The possible values are:
* Default: corresponds to internal entries generated by the Engine and
* CIL: corresponds to entries generated by the project code (see section 3. Project
Debugging for more info).
Module that sent the message. Possible values are:
* Main: it is the most frequent value.
* MailDispat: corresponds to entries generated by the Mail Dispatcher module.
Name of the Thread that generated the entry. Note that some thread names might be truncated
(for instance: <8>...tenerThreadPool : 2), but no information is lost because of that.
The values shown in this type of messages follow the following pattern:
<Severity>, "Data_&_Time", Application, Module, Thread, "Executing item: ToDo_Item_Type Inst
(ProcessId,InstanceId,ThreadId) Act [ActivityId] Proc [OU/ProcessName#Variation-Version] Due
[Time_the_Item_is_due]
TimeStamp
[Time_the_Item_was_created]
id[Todo_ItemId]
later
[isLater?]"
As you can see, this message is telling us what type of execution (ToDo_Item_Type), process, activity, and
instance the engine is about to run. For a listing and description of the To-Do Types, refer to section 5.1.1. To-Do
Item Types.
The following is an example in text format for version 6.0 and 10.3:
<D>, "Aug 25, 2009 4:30:45 PM", Engine, Main, <5> ET(3), "Executing item: RUN_AUTOMATIC Inst
(1,21,0) Act [StartExecution[End]] Proc [/LeaveProcess#Default-1.0] Due [2009-08-25 17:30:4504:00 1251235845000000] TimeStamp [2009-08-25 17:30:45-04:00] id[63150014] later [false]"
The only difference in the pattern is the addition of the Micro-Activity Id, as shown below:
<Severity>, "Data_&_Time", Application, Module, Thread, "Executing item: ToDo_Item_Type Inst
(ProcessId,InstanceId,ThreadId)
Act
[MicroActivityId[ActivityId]]
Proc
[OU/ProcessName#
Variation-Version]
Due
[Time_the_Item_is_due]
TimeStamp
[Time_the_Item_was_created]
id[Todo_ItemId] later [isLater?]"
The component elements of the message listed here are not going to be described in this document. If you have
questions about them, please, contact Oracle BPM Support (see section 12. Contacting Oracle BPM Support).
Important: All files listed above are part of the Engine Log. This means that none of the BPM Log applications will
be able to read the logs if any of these files are missing. Therefore, please, include all <engine-name>.log.* files
when sending the Engine Log to a Support analyst. An easy way to make sure all files were gathered is to
compress the whole log directory (for instance, C:\bea\albpm5.7\j2eewl\log).
Note that log-filename (that by default corresponds to the engine name) here can be set to any other value. Like,
for instance, the name of the Application Server Node.
Please, have in mind that this parameter will override the value specified by the Process Administrator. Therefore,
any change to the log directory in the Process Administrator will be ignored.
2.2.2. Enabling Asserts in the JVM that runs the BPM Engine
In BPM versions 5.5 and 5.7 (but not in 6.0 and 10.3), Java Asserts must be enabled in order for Debug messages
from the Engine to be generated. This configuration involves adding an additional JVM argument (-ea) to the start
script. The place where to add this argument depends on what type of engine you are running. The following
sections describe how to enable asserts in the Standalone, WebLogic and WebSphere versions.
10
11
If, for any reason, this configuration change does not affect the actual java command executed when WLS starts
(see section 2.2.3.1. Start output of the WebLogic Server), then change the startWebLogic.cmd or .sh
(depending on the OS) adding the -ea option as follows:
In Windows OS (startWebLogic.cmd):
set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS% -ea
In Unix-like OS (startWebLogic.sh):
JAVA_OPTIONS=$SAVE_JAVA_OPTIONS ea
12
13
Finally open the LogViewer and verify that Debug Messages coming from the server are being generated
(Application is Default for messages coming from the Engine and CIL for messages coming from BPM Methods
or custom code).
Note that the log filename <engine log file location>.log does not require an index after the .log.
This is an example of a grep command to find all items regarding a particular instance (in this case, instance 1234):
egrep 1234,|1234\/ /tmp/engine_log.txt > /tmp/Instance1234_log.txt
14
-ea
-classpath
%BPM_HOME%\lib\ftlib.jar
-ea
-classpath
%BPM_HOME%\lib\fuego.lib.jar
-ea
-classpath
$BPM_HOME/lib/fuego.lib.jar
15
3. Project Debugging
Whenever you experience a problem with the BPM Engine there is chance that the issue is triggered by:
- an aspect of your project design,
- a defect in the code of the project,
- a defect in one of the resources utilized by the Engine (and/or the Project),
- or a defect in the Engine.
In order to rule out the first two causes it is always of great help to include sufficient log messages in the BPM
Project code. In this section we are going to indicate how to do it in a meaningful way.
"::"
activity.name
"::<method_name>|<your_message>",
3.2.2. Log messages for Static Methods (this is, that do not have access to instance information. This includes
methods in Global Activites -that do not have instance access-):
logMessage(process.name
<severity_level>);
"::<activity
name>::<method_name>|<your_message>",
16
17
Then you can either select the link on Processes or Revisions in the following page:
Until you get to the relevant Revision (depending on the case, it could be the latest one or not) and there youll find
the link to Download the process files for it (called Recover the project revision), as shown below:
18
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
ABORT_COPIES
COMPONENT_NOTIFICATION
INSTANCE_RESUME
UNSELECT
BAM_UPDATER
SHUTDOWN
POLLING_DIRECTORY
CADUCATOR
GAUTOMATIC_INIT_LISTENING
PROCESS_CHECKPOINT
RUN_IMMEDIATE
ABORT_INSTANCE_EXCEPTION
START_SERVICES
GAUTOMATIC_JMS_LISTENING
UNDEPLOY
GAUTOMATIC_JMX_LISTENING
The description of the To-Do item types exceeds the scope of this document. If you have questions, please, contact
Oracle BPM Support (see section 12. Contacting Oracle BPM Support).
5.2. Obtaining affected entries in the table of Instances and Instance Events
In the case that you have found a problem with a specific instance it is always a good idea to collect the relevant
entries in the table of Instances (PPROCINSTANCE) and, optionally, the entries in the table of Instance Events
(PPROCINSTEVENT). Both of these tables are also located in the Engine Database. The following are examples of
how to obtain these entries:
5.2.a. Retrieves all copies of the Instance 1234 from the PPROCINSTANCE table:
select CREATIONTIME, NTHREADS, PROCESSID, HASPARTFORROLE, ACTIVATIONTIME, ITEMDEADLINE,
SOURCEACTIVITYNAME, PROCESSDEADLINE, NREMARKS, PENDINGITEMID, ACTIVITYNAME, NEXTPARTICIPANT,
PRIORITY, NAME, ACTIVITYDEADLINE, THREADID, PARENTTHREAD, CTHREADS, RECEIVETIME, LASTRESULT,
ROLEIN, INSTID, NCHANGES, NATTACHMENTS, STATE, INSTANCEDATA, AUTHOR, TOTALTHREADS, PARTICIPANT
from <Engine_Schema>.PPROCINSTANCE where INSTID = 1234;
19
5.2.b. Retrieves all events for the Instance 1234 from the PPROCINSTEVENT table:
select ACTIVATETIME, EVENTDATA, EVENTID, PROCESSID, THREADID, TYPE, ACTIVITYNAME, RECEIVETIME,
CATEGORY, EVENTTIME, INSTID, PARTICIPANT
from <Engine_Schema>.PPROCINSTEVENT where INSTID = 1234;
In the preceding examples we have included all BPM relevant columns excluding project sensitive information (i.e.
external variables: columns that start with V_). But you might as well run a select * if, for instance, the problem
was found on a test environment where external variables do not contain sensitive info for your business.
5.2.1. Instance States
When navigating the Process Instance table (PPROCINSTANCE), you might find useful to know what the meaning
of the different states is. The following is a list valid from version 5.5 onwards:
1 (2^0) = RUNNING
2 (2^1) = SUSPENDED
4 (2^2) = GRABBED
8 (2^3) = JOIN_WAITING
16 (2^4) = EXCEPTION
32 (2^5) = COMPLETED
64 (2^6) = ABORTED
128 (2^7) =
256 (2^8) =
512 (2^9) =
1024 (2^10)
2048 (2^11)
4096 (2^12)
8192 (2^13)
ACTIVITY_COMPLETED
ABORTING
AUTOMATIC_RESUME
= SHARING_VARIABLES
= STICKY_PARTICIPANT
= IN_RELAY
= SELECTED_FOR_EXECUTION
Note that several states can be present at the same time. When that is the case, the instance state is the addition
of the current states. For example, if the instance state is RUNNING and SHARING_VARIABLES, the
corresponding state code is 1 + 1024 = 1025. Conversely, if you find a state code of 1088, this means that the
instance state is 1088 = 1024 + 64, which means ABORTED and SHARING_VARIABLES. Another way of looking
at the state code is analyzing it as a binary word where each bit represents a different state. The individual states
th
are encoded with a bit in the n position of the word (being n the power of 2 shown in the list above).
The description of the states exceeds the scope of this document. If you have questions, please, contact Oracle
BPM Support (see section 12. Contacting Oracle BPM Support).
5.2.2. Instance Event Types
When navigating the Instance Event table (PPROCINSTEVENT), you might find useful to know what the meaning
of the different type ids is. The following is a list valid from version 5.5 onwards:
0 = INSTANCE_CREATED
1 = INSTANCE_END
2 = ACTIVITY_IN
3 = ACTIVITY_OUT
4 = GLOBAL_EXECUTED
5 = ITEM_SELECTED
6 = ITEM_UNSELECTED
7 = ITEM_EXECUTED
8 = INSTANCE_SUSPENDED
9 = INSTANCE_RESUMED
10 = INSTANCE_GRABBED
11 = INSTANCE_UNGRABBED
12 = INSTANCE_SELECTED
13
14
15
16
17
18
19
20
21
22
23
24
25
=
=
=
=
=
=
=
=
=
=
=
=
=
INSTANCE_UNSELECTED
SUBFLOW_INSTANCE_CREATED
INSTANCE_ABORTING
INSTANCE_TO_EXCEPTION
INSTANCE_ABORTED
ACTIVITY_COMPLETED
INSTANCE_UPDATED
USER_EVENT
INSTANCE_REASIGN
MEASUREMENT_START
MEASUREMENT_STOP
MEASUREMENT_START_STOP
VARIABLE_MEASUREMENT
The description of the event types exceeds the scope of this document. If you have questions, please, contact
Oracle BPM Support (see section 12. Contacting Oracle BPM Support).
20
21
This option might not work in all environments. In addition to that, it might be cumbersome to collect or copy the
results. In any case, there are other simply alternatives that will depend on the Operating System.
22
And once you have the process id, the SIGQUIT can be sent with the following command:
kill -3 <pid>
And advantage of this command is that you can create a simple script that calls it iteratively and with that collect
several consecutive FTDs at a regular time interval. A simple example of such script for a Unix system is:
while true
do
kill -3 $1
sleep .5
done
23
For more details about its use and syntax refer to: http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html
24
25
9.1. Performance deterioration due to insufficient space in the PAPI Instance cache
This is likely to affect projects with a considerable number of active instances per project and an elevated number
of users executing filters (or opening the Inbox). The PAPI cache is a cache of header information for instances. Its
main purpose is to eliminate unnecessary access to Instance tables by providing an abbreviated description of the
instance state and its main variables. The default size of the PAPI cache is 10,000 instances per process. In some
circumstances this number will fall short and you might find messages in the Engine log indicating the following:
Instance Cache: Opening the cache for process '/<ProcessName>#Default-<Version>'.
The maximum number of instances has been exceeded.
The best indicator for this type of problem is to execute the query 5.3.1. If there are more than 10,000 active
instances per process, you should increase the PAPI cache size. A good rule of thumb is to set the cache size to
double the number of current active instances per process. Values up to 1,000,000 can be used. The setting is
available in the WorkSpace (or Portal) configuration file (or in your custom PAPI application configuration). An
example of the location of this file in BPM 5.7 (which is similar to 5.5) is C:\bea\albpm5.7\enterprise\
webapps\portal\WEB-INF\portal.properties. The property within this file is the following:
fuego.portal.papi.instancesCacheSize=10000
An example in BPM 6.0 (which is similar to 10.3) is C:\bea\albpm6.0\enterprise\webapps\workspace\WEB-INF\
workspace.properties. The property within this file is the following:
fuego.workspace.papi.instancesCacheSize=10000
Please, remember that after changing this property in a WorkSpace running as a J2EE application you will need to
regenerate the WorkSpace EAR and redeploy it.
26
27
-Dfuego.server.amountInstancesToCommit=200
The value shown above is the recommended setting to be used when the problem has been found on the
environment. The common indicator for this type of problem is a SQLException caused by a transaction rolled
back. The stack trace will contain invocations to these methods:
o fuego.server.persistence.Persistence.getInstancesToDispose()
o fuego.server.execution.Caducator.disposeInstances()
o fuego.server.execution.Caducator.execute()
You should note that the syntax of the method might vary depending on the version. Therefore, when looking at the
logs you should look for key words like: "getInstancesToDispose", "caducator", "dispose", etc
Additionally, you might find the following message:
o "Could not dispose instances from process '/<process_name>#Default-<version>'"
Non-later items timeout problem: You will find a SQLException caused by a transaction rolled back. The
stack trace will contain invocations to these methods:
o fuego.ejbengine.ejb.EngineStartupBean.recoverLostItems()
o fuego.ejbengine.servlet.SchedulerServlet$RecoverLostItemsTask.runImpl()
Later items timeout problem: You will find a SQLException caused by a transaction rolled back. The stack
trace will contain invocations to these methods:
o
fuego.ejbengine.ejb.EngineStartupBean.sendLaterItems()
o
fuego.ejbengine.servlet.SchedulerServlet$SendItemsTask.runImpl()
You should note that the syntax of the method might vary depending on the version. Therefore, when looking at the
logs you should look for key words like: "recoverLostItems", "sendLaterItems", "Scheduler", etc
28
-Dfuego.papi.news.debug=true
This property is available in all versions.
For more information on this property, please, refer to the Issue # 7729408 (in https://bug.oraclecorp.com/) or
contact Oracle BPM Support (see section 12. Contacting Oracle BPM Support).
29
30