Log of execute thread pool status
hi guys
We are performing some performance analysis on a application and would
like to log the status of the execute thread pool periodically to a
log file.
The performance tests run for a extended period of time and hence
console is not proving to be effective in monitoring the behaviour
over a long period of time.
What other alternatives exist if I want to do this.
Thanks for your time
anand
thanks guys,
I found an answer in one of rob wollens old post.
http://dev2dev.bea.com/resourcelibrary/utilitiestools/index.jsp
Sorry for posting without doing a little research
~anand
Similar Messages
-
Execute threads used by connection pools
Hellos,
I am interested in fining out the relationship betwen the sizes of the execute
thread pool and a connection pool (jolt in my case).
I would like to know if each jolt conection uses up a thead from the default execute
queu or if the threads are taken from a different and reserved thread pool.
I am trying to tune up the thread pool size according to my pool sizes and so
on.
Any ideas?
Best regards,
CristinaCristina Ceballos wrote:
Hellos,
I am interested in fining out the relationship betwen the sizes of the execute
thread pool and a connection pool (jolt in my case).
I would like to know if each jolt conection uses up a thead from the default execute
queu or if the threads are taken from a different and reserved thread pool.
I am trying to tune up the thread pool size according to my pool sizes and so
on.
Any ideas?Hi. Connection pools do not use threads. Your application thread will get a connection
from the pool and use it. The relationship between threads and pools is that you want
to have enough connections in your pool to be able to serve all the threads that
may individually want a connection. Therefore for a server with 25 execute-threads,
you would typically define the pool to have 25 connections.
Joe
>
Best regards,
Cristina -
Thread pools for execute queues
We've set up thread pools for several execute queues dedicated to high-load servlets
in our application. Once in a while, we get into a condition in which none of
these threads are available and then the threads never become available - we have
to restart the server.
I realize that this is a pretty generic description of the problem :-) but I wonder
if anyone else has encountered this and has an idea what might be causing it ?
Right now I am guessing that something in our code causes a resource contention
that eventually deadlocks all the threads. But that is just a guess.Ethan,
"Ethan Allen" <[email protected]> wrote in message
news:3e0220a1$[email protected]..
Thanks, Dimitri and Slava !
I will do this and learn a little emore ...FYI, there is a web site dedicated to weblogic documentation -
http://e-docs.bea.com/
Pick your server version, go to "Search", type "thread dump".
Regards,
Slava Imeshev
>
ethan
"Slava Imeshev" <[email protected]> wrote:
Hi Ethan,
For windows press <Ctrl>+<Break> in the server shell window,
for *nix send kill -3 {server PID}.
Regards,
Slava Imeshev
"Ethan Allen" <[email protected]> wrote in message
news:3e020fb4$[email protected]..
Thanks for your reply, Dimitri.
We have not looked at thread dumps. How may we do this ?
Ethan
"Dimitri I. Rakitine" <[email protected]> wrote:
Did you try looking at thread dumps when this happens ?
Ethan Allen <[email protected]> wrote:
We've set up thread pools for several execute queues dedicated to
high-load
servlets
in our application. Once in a while, we get into a condition in
which
none of
these threads are available and then the threads never become
available
- we have
to restart the server.
I realize that this is a pretty generic description of the problem:-) but I wonder
if anyone else has encountered this and has an idea what might be
causing
it ?
Right now I am guessing that something in our code causes a
resource
contention
that eventually deadlocks all the threads. But that is just a
guess.
>>>>
Dimitri -
I'm running CF 9.0.1 on Ubuntu on an "Medium" Amazon EC2 instance. CF has been crashing intermittently (several times per day). At such times, running top gets me this (or something similar):
PID
USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+COMMAND
15855
wwwrun
20
0
1762m
730m
20m
S
99.3
19.4
13:22.96 coldfusion9
So, it's obviously consuming most of the server resources. The following error has been showing up in my cfserver.log in the leadup to each crash:
java.lang.RuntimeException: Request timed out waiting for an available thread to run. You may want to consider increasing the number of active threads in the thread pool.
If I run /opt/coldfusion9/bin/coldfusion status, I get:
Pg/Sec DB/Sec CP/Sec Reqs Reqs Reqs AvgQ AvgReq AvgDB Bytes Bytes
Now Hi Now Hi Now Hi Q'ed Run'g TO'ed Time Time Time In/Sec Out/Sec
0 0 0 0 -1 -1 150 25 0 0 -1352560 0 0
In the administrator, under Server Settings > Request Tuning, the setting for Maximum number of simultaneous Template requests is 25. So this makes sense so far. I could just increase the thread pool to cover these sort of load spikes. I could make it 200. (Which I did just now as a test.)
However, there's also this file /opt/coldfusion9/runtime/servers/coldfusion/SERVER-INF/jrun.xml. And some of the settings in there appear to conflict. For example, it reads:
<service class="jrunx.scheduler.SchedulerService" name="SchedulerService">
<attribute name="bindToJNDI">true</attribute>
<attribute name="activeHandlerThreads">25</attribute>
<attribute name="maxHandlerThreads">1000</attribute>
<attribute name="minHandlerThreads">20</attribute>
<attribute name="threadWaitTimeout">180</attribute>
<attribute name="timeout">600</attribute>
</service>
Which a) has fewer active threads (what does this mean?), and b) has a max threads that exceed the simultaneous request limit set in the admin. So, I'm not sure. Are these independent configs that need to be made to match manually? Or is the jrun.xml file supposed to be written by the CF Admin when changes are made there? Hmm. But maybe this is different because presumably the CF Scheduler should only use a subset of all available threads, right...so we'd always have some threads for real live users. We also have this in there:
<service class="jrun.servlet.http.WebService" name="WebService">
<attribute name="port">8500</attribute>
<attribute name="interface">*</attribute>
<attribute name="deactivated">true</attribute>
<attribute name="activeHandlerThreads">200</attribute>
<attribute name="minHandlerThreads">1</attribute>
<attribute name="maxHandlerThreads">1000</attribute>
<attribute name="mapCheck">0</attribute>
<attribute name="threadWaitTimeout">300</attribute>
<attribute name="backlog">500</attribute>
<attribute name="timeout">300</attribute>
</service>
This appears to have changed when I changed the CF Admin setting...maybe...but it's the activeHandlerThreads that matches my new maximum simulataneous requests setting...rather than the maxHandlerThreads, which again exceeds it. Finally, we have this:
<service class="jrun.servlet.jrpp.JRunProxyService" name="ProxyService">
<attribute name="activeHandlerThreads">200</attribute>
<attribute name="minHandlerThreads">1</attribute>
<attribute name="maxHandlerThreads">1000</attribute>
<attribute name="mapCheck">0</attribute>
<attribute name="threadWaitTimeout">300</attribute>
<attribute name="backlog">500</attribute>
<attribute name="deactivated">false</attribute>
<attribute name="interface">*</attribute>
<attribute name="port">51800</attribute>
<attribute name="timeout">300</attribute>
<attribute name="cacheRealPath">true</attribute>
</service>
So, I'm not certain which (if any) of these I should change and what exactly the relationship is between maximum requests and maximum threads. Also, since several of these list the maxHandlerThreads as 1000, I'm wondering if I should just set the maximum simultaneous requests to 1000. There must be some upper limit that depends on available server resources...but I'm not sure what it is and I don't really want to play around with it since it's a production environment.
I'm not sure if it pertains to this issue at all, but when I run a ps aux | grep coldfusion I get the following:
wwwrun 15853 0.0 0.0 8704 760 pts/1
S
20:22 0:00 /opt/coldfusion9/runtime/bin/coldfusion9 -jar jrun.jar -autorestart -start coldfusion
wwwrun 15855 5.4 18.2 1678552 701932 pts/1
Sl
20:22 1:38 /opt/coldfusion9/runtime/bin/coldfusion9 -jar jrun.jar -start coldfusion
There are always these two and never more than these two processes. So there does not appear to be a one-to-one relationship between processes and threads. I recall from an MX 6.1 install I maintained for many years that additional CF processes were visible in the process list. It seemed to me at the time like I had a process for each thread...so either I was wrong or something is quite different in version 9 since it's reporting 25 running requests and only showing these two processes. If a single process can have multiple threads in the background, then I'm given to wonder why I have two processes instead of one...just curious.
So, anyway, I've been experimenting while composing this post. As noted above I adjusted the maximum simulataneous requests up to 200. I was hoping this would solve my problem, but CF just crashed again (rather it slogged down and requests started timing out...so effectively "crashed"). This time, top looked similar (still consuming more than 99% of the CPU), but CF status looked different:
Pg/Sec DB/Sec CP/Sec Reqs Reqs Reqs AvgQ AvgReq AvgDB Bytes Bytes
Now Hi Now Hi Now Hi Q'ed Run'g TO'ed Time Time Time In/Sec Out/Sec
0 0 0 0 -1 -1 0 150 0 0 0 0 0 0
Obviously, since I'd increased the maximum simultaneous requests, it was allowing more requests to run simultaneously...but it was still maxing out the server resources.
Further experiments (after restarting CF) showed me that the server became unusably slogged after about 30-35 "Reqs Run'g", with all additional requests headed for an inevitible timeout:
Pg/Sec DB/Sec CP/Sec Reqs Reqs Reqs AvgQ AvgReq AvgDB Bytes Bytes
Now Hi Now Hi Now Hi Q'ed Run'g TO'ed Time Time Time In/Sec Out/Sec
0 0 0 0 -1 -1 0 33 0 0 -492 0 0 0
So, it's clear that increasing the maximum simultaneous requests has not helped. I guess what it comes down to is this: What is it having such a hard time with? Where are these spikes coming from? Bursts of traffic? On what pages? What requests are running at any given time? I guess I simply need more information to continue troubleshooting. If there are long-running requests, or other issues, I'm not seeing it in the logs (although I do have that option checked in the admin). I need to know which requests exactly are those responsible for these spikes. Any help would be much appreciated. Thanks.
~DayI really appreciate your help. However, I haven't been able to find the JRun Thread settings you describe above.
Under Request Tuning, I see:
Server Settings > Request Tuning
Request Limits
Maximum number of simultaneous Template requests
Restricts the number of simultaneously processed requests. Use this setting to increase overall system performance for heavy load applications. Requests beyond the specified limit are queued. On Standard Edition, you must restart ColdFusion to enable this setting.
Maximum number of simultaneous Flash Remoting requests
The number of Flash Remoting requests that can be processed concurrently.
Maximum number of simultaneous Web Service requests
The number of Web Service requests that can be processed concurrently.
Maximum number of simultaneous CFC function requests
The number of ColdFusion Component methods that can be processed concurrently via HTTP. This does not affect invocation of CFC methods from within CFML, only methods requested via an HTTP request.
Tag Limit Settings
Maximum number of simultaneous Report threads
The maximum number of ColdFusion reports that can be processed concurrently.
Maximum number of threads available for CFTHREAD
The maximum number of threads created by CFTHREAD that will be run concurrently. Threads created by CFTHREAD in excess of this are queued. On Standard Edition, the maximum limit is 10.
And under Java and JVM, I see:
Server Settings > Java and JVM
Java and JVM settings control the way ColdFusion starts the Java Virtual Machine when it starts. You can control settings like what classpaths are used and how memory is allocated as well as add custom command line arguments. Changing these settings requires restarting ColdFusion. If you enter an incorrect setting, ColdFusion may not restart properly.
Backups of the jvm.config file are created when you hit the submit button. You can use this backup to restore from a critical change.
Java Virtual Machine Path
Specifies the location of the Java Virtual Machine.
Minimum JVM Heap Size (MB) Maximum JVM Heap Size (MB)
The Memory Size settings determine the amount of memory that the JVM can use for programs and data.
ColdFusion Class Path
Specifies any additional class paths for the JVM, with multiple directories separated by commas.
JVM Arguments
-server -Dsun.io.useCanonCaches=false -XX:MaxPermSize=192m -XX:+UseParallelGC -Xbatch -Dcoldfusion.rootDir={application.home}/../ -Dcoldfusion.libPath={application.home}/../lib
Specifies any specific JVM initialization options, separated by spaces.
I did go take a look at FusionReactor and found it's not free (which would be fine, of course, if it would actually help). It looks like there's a fully functional demo, which is cool...but I've haven't been able to get it to install yet, so we'll see.
Thanks again!
~Day
(By the way, I've cross-posted this inquiry on StackOverflow. So if you're able to help me arrive at a solution you might want to answer there as well.) -
Thread Pool , Executors ...
Sorry if i make a stupid post now, but i'm looking for a implementation of a Thread Pool using the latest 1.5 java.util.concurrent classes and i can't find anything serious. Any implementation or link to a tutorial should be vary helpful.
Thnxbut i'm looking
for a implementation of a Thread Pool using
the latest 1.5 java.util.concurrent classes and i
can't find anything serious. Any implementation or
link to a tutorial should be vary helpful.
Thnxhere is an Example :
import java.util.concurrent.*;
public class UtilConcurrentTest {
public static void main(String[] args) throws InterruptedException {
int numThreads = 4;
int numTasks = 20;
ExecutorService service = Executors.newFixedThreadPool(numThreads);
// do some tasks:
for (int i = 0; i < numTasks; i++) {
service.execute(new Task(i));
service.shutdown();
log("called shutdown()");
boolean isTerminated = service.awaitTermination(60, TimeUnit.SECONDS);
log("service terminated: " + isTerminated);
public static void log(String msg) {
System.out.println(System.currentTimeMillis() + "\t" + msg);
private static class Task implements Runnable {
private final int id;
public Task(int id) {
this.id = id;
public void run() {
log("begin:\t" + this);
try { Thread.sleep(1000); } catch (InterruptedException e) {}
log("end\t" + this);
public String toString() {
return "Task " + id + " in thread " + Thread.currentThread().getName();
} -
When using a thread pool executor (java.util.concurrent.ThreadPoolExecutor) to limit the number of threads executing at a time, the number of threads running still exceeds the limit number.
This is the code:
private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 3, 20, TimeUnit.SECONDS, new LinkedBlockingQueue());
The number of tasks in my program are 4, so i always have 4 threads running, although i limited it to 3.
Can anyone help me with this problem? Or can u propose another solution to limit the number of running threads? By the way, i also tried using a newFixedThreadPool() and got the same problem.
Thx.The number of tasks in my program are 4, so i always
have 4 threads running, although i limited it to 3.How do you know that there are 4 threads running? If you're generating a JVM thread dump, you're going to see threads that are used internally by the JVM.
Here's a simple program that creates a fixed-size threadpool and runs jobs. It limits the number of concurrent threads to 3. Compare it to what you're doing, I'm sure that you'll find something different. Also, verify that you're not creating threads somewhere else in your program; all of the ThreadPoolExecutor threads will have names of the form "pool-X-thread-Y"
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
public class ThreadPoolTest {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(3);
for (int ii = 0 ; ii < 10 ; ii++) {
pool.execute(new MyRunnable());
pool.shutdown();
private static class MyRunnable implements Runnable {
public void run() {
log("running");
try {
Thread.sleep(1000L);
catch (InterruptedException e) {
log("interrupted");
private void log(String msg) {
System.err.println(
msg + " on " + Thread.currentThread().getName()
+ " at " + System.currentTimeMillis());
} -
The problem in the thread pool implemented by myself
Hello, I need to a thread pool in J2ME CDC 1.0 + FP 1.0, so I implemented a simple one by myself that also meets my own requirement.
Here is the main idea:
The thread pool creates a fixed number of threads in advance. When a task comes, it is put in the waiting list. All threads tries to get the tasks from the waiting list. If no task exists, the threads wait until someone wakes them up.
Here are the requirements from myself:
1. when a task has finished its work in one execution, it is put in the waiting list for the next run.
2. the task can control the delay between when the task owner tries to put it in the waiting list and when the task is actually put in the waiting list. I need this function because sometimes I don't want the tasks to run too often and want to save some CPU usage.
In my program, I creates two thread pools. In one pool, every task don't use the delay, and the thread pool works very well. The other pool has the tasks that use the delay, and sometimes, as I can see from the printed information, there are many tasks in the waiting list but 0 or 1 thread executes tasks. It seems that the waiting threads cannot wake up when new tasks comes.
I suspect the code in addTask(), but cannot find the reason why it fails. Could anyone please help me find out the bug in my code? I put the code of thread pool below
Thank you in advance
Zheng Da
ThreadPool.java
package j2me.concurrent;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
import alvis.general.Util;
public class ThreadPool {
private int maxQueueSize;
private boolean running = true;
private Thread[] threads;
private LinkedList tasks = new LinkedList();
private Timer timer = new Timer(true);
private AtomicInteger usingThreads = new AtomicInteger(0);
private synchronized boolean isRunning() {
return running;
private synchronized void stopRunning() {
running = false;
private synchronized PoolTask getTask() {
while (tasks.isEmpty() && isRunning()) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
if (tasks.isEmpty())
return null;
// Util.log.info(Thread.currentThread().getName() +
// " gets a task, left tasks: " + tasks.size());
return (PoolTask) tasks.removeFirst();
private synchronized void addTaskNoDelay(PoolTask task) {
tasks.addLast(task);
notifyAll();
private synchronized void addTask(final PoolTask task) {
long delay = task.delay();
if (delay == 0) {
addTaskNoDelay(task);
} else {
timer.schedule(new TimerTask() {
public void run() {
addTaskNoDelay(task);
}, delay);
private synchronized int numTasks() {
return tasks.size();
private class PoolThread extends Thread {
public void run() {
Util.poolThreads.inc();
while (isRunning()) {
PoolTask task = getTask();
if (task == null) {
Util.poolThreads.dec();
return;
usingThreads.inc();
long currentTime = System.currentTimeMillis();
task.run();
long elapsedTime = System.currentTimeMillis() - currentTime;
if (elapsedTime > 100)
System.err.println(task.toString() + " takes " + ((double) elapsedTime)/1000 + "s");
usingThreads.dec();
if (!task.finish()) {
addTask(task);
Util.poolThreads.dec();
public ThreadPool(int size, int taskQueueSize) {
maxQueueSize = taskQueueSize;
threads = new Thread[size];
for (int i = 0; i < threads.length; i++) {
threads[i] = new PoolThread();
threads.start();
public synchronized boolean executor(PoolTask task) {
if (!isRunning()) {
return false;
Util.log.info("Thread Pool gets " + task + ", there are "
+ numTasks() + " waiting tasks");
if (numTasks() >= maxQueueSize) {
return false;
addTask(task);
return true;
public synchronized void destroy() {
stopRunning();
timer.cancel();
// TODO: I am not sure it can wake up all threads and destroy them.
this.notifyAll();
public synchronized void printSnapshot() {
System.err.println("using threads: " + usingThreads + ", remaining tasks: " + tasks.size());
PoolTask.javapackage j2me.concurrent;
public interface PoolTask extends Runnable {
* It shows if the task has already finished.
* If it isn't, the task will be put in the thread pool for the next execution.
* @return
boolean finish();
* It shows the delay in milliseconds that the task is put in the thread pool.
* @return
long delay();are receiving/sends tasks packets time consuming operation in your case or not? if it is not you do not need to use thread pools at all. you can create a queue like in your code through the linked list and dispatch this queue periodically with minimum monitor usage. try this.
import java.util.LinkedList;
public class PacketDispatcher extends Thread {
LinkedList list = new LinkedList();
public PacketDispatcher (String name) {
super(name);
public void putTask(Task task) {
synchronized (list) {
list
.add(task);
list.notify();
public void run() {
while (true/* your condition */) {
Task task = null;
synchronized (list) {
while (list.isEmpty())
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
task = (Task)list
.poll();
if (task == null) {
try {
Thread
.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
continue;
task
.run();
if (!task.isFinished()) {
putTask(task);
Thread
.yield();
public static void main(String[] args) {
// just for test
try {
Thread.sleep (10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
PacketDispatcher dispatcher = new PacketDispatcher("Packet Dispatcher");
Task task = new Task();
dispatcher.putTask(task);
dispatcher.start();
try {
Thread.sleep (10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Task task2 = new Task();
dispatcher.putTask(task2);
class Task {
long result = 0;
public boolean isFinished () {
if (getResult() >= 10000000) {
return true;
return false;
public void run() {
for (int i = 0; i < 1000; i++) {
result += i;
public long getResult () {
return result;
} -
Fixed Size Thread Pool which infinitely serve task submitted to it
Hi,
I want to create a fixed size thread pool say of size 100 and i will submit around 200 task to it.
Now i want it to serve them infinitely i.e once all tasks are completed re-do them again and again.
public void start(Vector<String> addresses)
//Create a Runnable object of each address in "addresses"
Vector<FindAgentRunnable> runnables = new Vector<FindAgentRunnable>(1,1);
for (String address : addresses)
runnables.addElement(new FindAgentRunnable(address));
//Create a thread pool of size 100
ExecutorService pool = Executors.newFixedThreadPool(100);
//Here i added all the runnables to the thread pool
for(FindAgentRunnable runnable : runnables)
pool.submit(runnable);
pool.shutdown();
}Now i wants that this thread pool execute the task infinitely i.e once all the tasks are done then restart all the tasks again.
I have also tried to add then again and again but it throws a java.util.concurrent.RejectedExecutionException
public void start(Vector<String> addresses)
//Create a Runnable object of each address in "addresses"
Vector<FindAgentRunnable> runnables = new Vector<FindAgentRunnable>(1,1);
for (String address : addresses)
runnables.addElement(new FindAgentRunnable(address));
//Create a thread pool of size 100
ExecutorService pool = Executors.newFixedThreadPool(100);
for(;;)
for(FindAgentRunnable runnable : runnables)
pool.submit(runnable);
pool.shutdown();
try
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
catch (InterruptedException ex)
Logger.getLogger(AgentFinder.class.getName()).log(Level.SEVERE, null, ex);
}Can anybody help me to solve this problem?
Thnx in advance.Ravi_Gupta wrote:
*@ kajbj*
so what should i do?
can you suggest me a solution?Consider this thread "closed". Continue to post in your other thread. I, and all others don't want to give answers that already have been given. -
Hi,
How can I increase the number of threads of an EMS (Enterprise Manager Source)?
We define a JMS Queue and I only see there are only 5 consumers.. The processing of the messages from the queue are two slow..
Thanks in advance,
JulianThe number of tasks in my program are 4, so i always
have 4 threads running, although i limited it to 3.How do you know that there are 4 threads running? If you're generating a JVM thread dump, you're going to see threads that are used internally by the JVM.
Here's a simple program that creates a fixed-size threadpool and runs jobs. It limits the number of concurrent threads to 3. Compare it to what you're doing, I'm sure that you'll find something different. Also, verify that you're not creating threads somewhere else in your program; all of the ThreadPoolExecutor threads will have names of the form "pool-X-thread-Y"
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
public class ThreadPoolTest {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(3);
for (int ii = 0 ; ii < 10 ; ii++) {
pool.execute(new MyRunnable());
pool.shutdown();
private static class MyRunnable implements Runnable {
public void run() {
log("running");
try {
Thread.sleep(1000L);
catch (InterruptedException e) {
log("interrupted");
private void log(String msg) {
System.err.println(
msg + " on " + Thread.currentThread().getName()
+ " at " + System.currentTimeMillis());
} -
Weblogic Server Shutting down execute threads
Weblogic 5.1 SP9 on Solaris.
After upgrading to SP9 from SP8 we are observing a new message in our log during
the START UP PROCESS. It seems that after performing a GC and during the creation
of the connection pools we are receiving a message "Shutting down execute threads".
Though Weblogic starts up ok after this and performs ok we are still concerned
on what execute threads are shutting down?
Any help in an explanation would be appreciated.
<I> <GC> GC: After free/total=505281560/531955712 (94%)
GC: After free/total=505281560/531955712 (94%)Wed Aug 08 18:08:33 EDT 2001:<I> <WebLogicServer> Shutting down execute threads
Wed Aug 08 18:08:33 EDT 2001:<I> <WebLogicServer> Shutdown completed
Wed Aug 08 18:08:33 EDT 2001:<I> <WebLogicServer> Shutdown completedcould you post complete the log file
right from the server startup to until WLS
listens on http & SSL ports?
Kumar
Andy wrote:
Weblogic 5.1 SP9 on Solaris.
After upgrading to SP9 from SP8 we are observing a new message in our log during
the START UP PROCESS. It seems that after performing a GC and during the creation
of the connection pools we are receiving a message "Shutting down execute threads".
Though Weblogic starts up ok after this and performs ok we are still concerned
on what execute threads are shutting down?
Any help in an explanation would be appreciated.
<I> <GC> GC: After free/total=505281560/531955712 (94%)
GC: After free/total=505281560/531955712 (94%)Wed Aug 08 18:08:33 EDT 2001:<I> <WebLogicServer> Shutting down execute threads
Wed Aug 08 18:08:33 EDT 2001:<I> <WebLogicServer> Shutdown completed
Wed Aug 08 18:08:33 EDT 2001:<I> <WebLogicServer> Shutdown completed -
Change the Execute Thread Count im weblogic9.2
Hi
I am trying to change the execute thread count in weblogic 9.2 but i am not able to find the location in weblogic Console to change it can any one help meHi,
In previous versions of WebLogic Server, processing was performed in multiple execute queues. Different classes of work were executed in different queues, based on priority and ordering requirements, and to avoid deadlocks. In addition to the default execute queue, weblogic.kernel.default, there were pre-configured queues dedicated to internal administrative traffic, such as weblogic.admin.HTTP and weblogic.admin.RMI. Now the Same thing is done using WorkManagers...
WebLogic Server, Version 8.1 implemented Execute Queues to handle thread management which allowed you to create thread-pools to determine how workload was handled. WebLogic Server still provides Execute Queues for backward compaitibility, primarily to facilitate application migration. However, new application development should utilize Work Managers to peform thread management more efficiently.
You can enable Execute Queues in the following ways:
* Using the command line option*
-Dweblogic.Use81StyleExecuteQueues=true
So in that Case ...*config.xml* entry will be like this:
<server>
<name>AdminServer</name>
<execute-queue>
<name>weblogic.kernel.Default</name>
<queue-length>256</queue-length>
</execute-queue>
<use81-style-execute-queues>true</use81-style-execute-queues>
<listen-port>7001</listen-port>
<web-server>
<web-server-log>
<file-name>../../logs/admin_access.log</file-name>
</web-server-log>
</web-server>
<listen-address>aaa.bbb.com</listen-address>
</server>
for more detailed Information Please refer to:
http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html
Edited by: Jay SenSharma on Jan 20, 2010 3:42 PM -
A good design for a single thread pool manager using java.util.concurrent
Hi,
I am developing a client side project which in distinct subparts will execute some tasks in parallel.
So, just to be logorroic, something like that:
program\
\--flow A\
\task A1
\task A2
\--flow B\
\task B1
\task B2
\...I would like both flow A and flow B (and all their launched sub tasks) to be executed by the same thread pool, because I want to set a fixed amount of threads that my program can globally run.
My idea would be something like:
public class ThreadPoolManager {
private static ExecutorService executor;
private static final Object classLock = ThreadPoolManager.class;
* Returns the single instance of the ExecutorService by means of
* lazy-initialization
* @return the single instance of ThreadPoolManager
public static ExecutorService getExecutorService() {
synchronized (classLock) {
if (executor != null) {
return executor;
} else {
// TODO: put the dimension of the FixedThreadPool in a property
executor = Executors.newFixedThreadPool(50);
return executor;
* Private constructor: deny creating a new object
private ThreadPoolManager() {
}The tasks I have to execute will be of type Callable, since I expect some results, so you see an ExecutorService interface above.
The flaws with this design is that I don't prevent the use (for example) of executor.shutdownNow(), which would cause problems.
The alternative solution I have in mind would be something like having ThreadPoolManager to be a Singleton which implements ExecutorService, implementing all the methods with Delegation to an ExecutorService object created when the ThreadPoolManager object is instantiated for the first time and returned to client:
public class ThreadPoolManager implements ExecutorService {
private static ThreadPoolManager pool;
private static final Object classLock = ThreadPoolManager.class;
private ExecutorService executor;
* Returns the single instance of the ThreadPoolManager by means of
* lazy-initialization
* @return the single instance of ThreadPoolManager
public static ExecutorService getThreadPoolManager() {
synchronized (classLock) {
if (pool !=null) {
return pool;
} else {
// create the real thread pool
// TODO: put the dimension of the FixedThreadPool in a property
// file
pool = new ThreadPoolManager();
pool.executor = Executors.newFixedThreadPool(50);
// executor = Executors.newCachedThreadPool();
return pool;
* Private constructor: deny creating a new object
private ThreadPoolManager() {
/* ======================================== */
/* implement ExecutorService interface methods via delegation to executor
* (forbidden method calls, like shutdownNow() , will be "ignored")
// .....I hope to have expressed all the things, and hope to receive an answer that clarifies my doubts or gives me an hint for an alternative solution or an already made solution.
ciao
AlessioTwo things. Firstly, it's better to use private static final Object classLock = new Object();because that saves you worrying about whether any other code synchronises on it. Secondly, if you do decide to go for the delegation route then java.lang.reflect.Proxy may be a good way forward.
-
Alternative to WebLogic 8.1 Execute thread Qs in Websphere 6.1
Hi All,
We are in the process of migrating from WebLogic 8.1 to WAS 6.1. We have few application in WebLogic that use custom execute threads so that trafic is moved to user defined thread instead of default thread pool. This is done in weblogic using dispatch-policy tag under weblogic.xml.
I appreciate if someone could help me understand the alternative of doing same thing in WebSphere 6.1.
I was going thru some site searching and came across Work Manager that does the same thing which is new to me but does similar job.
Thanks in advanceHi All,
We are in the process of migrating from WebLogic 8.1 to WAS 6.1. We have few application in WebLogic that use custom execute threads so that trafic is moved to user defined thread instead of default thread pool. This is done in weblogic using dispatch-policy tag under weblogic.xml.
I appreciate if someone could help me understand the alternative of doing same thing in WebSphere 6.1.
I was going thru some site searching and came across Work Manager that does the same thing which is new to me but does similar job.
Thanks in advance -
How do you modify the default Execute thread count in Weblogic Server 9.2?
How do you modify the default Execute thread count in Weblogic Server 9.2?
How can you tune the starting number of weblogic.ExecuteThread on server startup and/or set minimum number?
Is there an option from the console?
Please let me know.
ThanksSelf tuning will automatically manage the threads but however you can still control the min and max by adding the min and max values for each instance either directly adding in config.xml or through JVM settings
1) Modifying the config.xml
Just add the following line(s) to each server definition :
<server>
<name>AdminServer</name>
<self-tuning-thread-pool-size-min>100</self-tuning-thread-pool-size-min>
<self-tuning-thread-pool-size-max>200</self-tuning-thread-pool-size-max>
</server>
2) Adding some JVM parameters
It's safer the following way :
add the following option in your command line : -Dweblogic.threadpool.MinPoolSize=100
Regards
RR -
Custom thread pool for Java 8 parallel stream
It seems that it is not possible to specify thread pool for Java 8 parallel stream. If that's so, the whole functionality is useless in most of the situations. The only situation I can safely use it is a small single threaded application written by one person.
In all other cases, if I can not specify the thread pool, I have to share the default pool with other parts of the application. If someone submits a task that takes a lot of time, my tasks will get stuck. Is that correct or am I overlooking something?
Imagine that someone submits slow networking operation to the fork-join pool. It's not a good idea, but it's so tempting that it will be happening. In such case, all CPU intensive tasks executed on parallel streams will wait for the networking task to finish. There is nothing you can do to defend your part of the application against such situations. Is that so?You are absolutely correct. That isn't the only problem with using the F/J framework as the parallel engine for bulk operations. Have a look http://coopsoft.com/ar/Calamity2Article.html
Maybe you are looking for
-
How do I move music from iPod or iPad to iPhone or PCS?
HI I have purchased Match to move my music between devices as my old steam driven PC that I used to store my music on was retired last year. How can I move/copy my music including old CD tracks from my iPod or my iPad to my iPhone and Windows XP lapt
-
How can we use cl_gui_html_viewer in a background process.
Hello, Refering to this thread: Pie chart using Class cl_igs_chart ?? How can we use cl_gui_html_viewer in a background process. I want to execute a html code in bakground process in abap program. but using cl_gui_html_viewer I have an error wi
-
Import Libraries (jar) into DC Project
Hi all, I want to create a J2EE application with an DC Web-Modul. I have to import any jar libraries for other functions (struts.jar etc.). I have imported the library in the project settings: properties ->java buildpath -> add external jars. But it
-
Which Ipad is the best?
-
We have a small problem with runWLSToffline.sh. The program sets WL_HOME to an empty string in startWeblogic.sh. StartWeblogic.sh before runWLSToffline.sh is run: WL_HOME="/opt/bea/81sp2_hard/weblogic81" and after WL_HOME="" The work around is to mak