Consumers count = thread count ?

          Hello,
          I've implemented on a wl cluster (10 6.1sp4 instances, patched with CR091195)
          the approximated distributed destination pattern.
          In my case the destination is a queue.
          Every wl instance has thread count = 100.
          I have 1 mdb, non transactional, and I haven't configured the max-beans-in-free-pool.
          It happens, when I deploy the MDB, targetting it to the cluster, that I can see
          on every wl instance (I have a monitoring program):
          JMSRuntime.connectionsCurrentCount = 1
          JMSConnectionRuntime.sessionsCurrentCount = 100 (I have only a "connection4116")
          JMSDestinationRuntime.consumersCurrentCount = 100 (I have only 1 queue)
          Why do I have all of these active consumers/sessions ?
          (and I haven't yet run my jms client)
          Thanks in advance
          Best Regards
          Mark
          

          Hi Mark,
          Before 6.1SP5, each MDB pool initializes
          Math.min(default-execute-thread-pool-size,
          max-beans-in-free-pool)
          consumers and sessions.
          For 6.1SP5 and later, each MDB pool initializes
          Math.min(default-execute-thread-pool-size/2 + 1,
          max-beans-in-free-pool)
          consumers and sessions.
          WL 7.0SP? (SP3 maybe?), and 8.1
          allow MDBs to use the "dispatch-policy" descriptor field
          and so assign themselves to a different
          thread-pool. In which case initialized max concurrent
          instances becomes:
          Math.min(custom-thread-pool-size,
          max-beans-in-free-pool)
          I think that the max-beans-in-free-pool default is
          some very high number. (At one point it was 1500).
          The consumer instances will not necessarily all use
          a thread at the same time, as they do not use
          up a thread when they are not operating on a
          message. In essence, thread usage depends on how
          slow the receivers are, how fast the producers are, and
          what other resources are also using
          the thread pool.
          I recommend tuning max-beans-in-free-pool so that total
          instance count on a server is somewhat less than
          the the thread count. This helps prevent dead-locks
          where all threads are running app code, and none
          are left to do other work.
          In case you are unaware, I also recommend
          using less than 100 threads unless the the
          app typically blocks a thread for long periods of time.
          The reason is that lots of threads may negatively
          impact performance, the operating system ends up
          burning CPU switching itself between threads
          rather than doing actual work.
          Each MDB deployment uses a single connection.
          Hope this helps,
          Tom, BEA
          P.S. The above information will be in the next
          iteration of the JMS Performance Guide white-paper,
          which I've currently started working on again.
          "Mark Cordobal" <[email protected]> wrote:
          >
          >Hello,
          >
          >I've implemented on a wl cluster (10 6.1sp4 instances, patched with CR091195)
          >the approximated distributed destination pattern.
          >In my case the destination is a queue.
          >
          >Every wl instance has thread count = 100.
          >
          >I have 1 mdb, non transactional, and I haven't configured the max-beans-in-free-pool.
          >
          >It happens, when I deploy the MDB, targetting it to the cluster, that
          >I can see
          >on every wl instance (I have a monitoring program):
          >
          >JMSRuntime.connectionsCurrentCount = 1
          >JMSConnectionRuntime.sessionsCurrentCount = 100 (I have only a "connection4116")
          >JMSDestinationRuntime.consumersCurrentCount = 100 (I have only 1 queue)
          >
          >Why do I have all of these active consumers/sessions ?
          >(and I haven't yet run my jms client)
          >
          >
          >Thanks in advance
          >
          >Best Regards
          >
          >
          >Mark
          

Similar Messages

  • How can I kill all Threads of the same class from within the run() method?

    Ok
    I have a class called Consumer that extends Thread
    I have several Consumer threans running... but, when a certain condition is true (within the run() method) in ANY of the threads, I want to kill ALL the threads of that object.
    is this possible?

    I know this is gonna be too demanding, but can someone please tell me why my Consumer's run() method never reaches the System.out.println( "ALL CONSUMING DONE") line
    Create a multi-threaded prime number calculator that is based on the producer-consumer model
    using semaphores. Your program should be able to check for prime numbers in a range specified
    by the user and with a variable number of threads. Example:
    $ java PrimeFind 3 5000 10000
    should use 1 producer and 2 consumers (3 threads in total, obviously the minimum is 2) to find all
    the prime numbers in the range [5000,10000].
    The producer should: use a buffer to store candidate numbers that have to be checked for
    primality.
    Consumers should: read from the buffer, check if a number is prime and update the status of the
    program accordingly (e.g. show the number on the screen, or save it to a file)
    import java.util.concurrent.Semaphore;
    import java.io.*;
    public class Assign1 {
    static int fromThisNumber;
    static int toThisNumber;
    static int numberOfThreads;
    static int buffer[];
    static Semaphore ready;          /*This semaphore is used by the Producer to signal
                                         an "OK" to the consumers*/
    static Semaphore critical;  /*This is a Mutex semaphore. It allows only 1 consumer
                                         to enter his critical section.
    static Semaphore counter;     /*This semaphore acts as a counter.
                                        Instead of having a global variable
                                         incremented each time, we just release()
                                         this semephore when we find a prime number
                                         Because remember that release() increments permits
    static Producer prod;
    static Consumer cons[];
    static int in=0;
    static int out=0;
    static PrintWriter outFile;
         public static void main (String args[]){
              try{
                   outFile=new PrintWriter(new FileWriter("primes.txt"));
                   }catch(Exception e){}
              numberOfThreads=Integer.parseInt(args[0]);
              fromThisNumber=Integer.parseInt(args[1]);
              toThisNumber=Integer.parseInt(args[2]);
              buffer=new int[Integer.parseInt(args[2])-Integer.parseInt(args[1])+1];
              ready=new Semaphore(0,false); /*We initialise it to 0 because we wait
                                                      for the Producer to produce atleast a
                                                      item. Suppose ready was 1 and if
                                                      Consumer ran first he would be in an
                                                      empty buffer */
              critical=new Semaphore (1,false);/*We initialise it to 1 because when
                                                         the first Consumer thread tries
                                                         to enter its critical section, it
                                                         should be allowed to;
                                                         Subsequent threads will have to
                                                         wait since only 1 thread can
                                                         access its critical section at a time*/
              counter=new Semaphore(0,false); // duh!
              cons=new Consumer[numberOfThreads-1]; /*numberOfThreads-1 because 1 thread
                                                                is taken by the Producer*/
              //Creating Producer object
              prod=new Producer();
              //Creating the Consumer object and start the thread.
              for(int i=0;i<cons.length;i++)
                        cons=new Consumer();
                        cons[i].start();
              prod.start();          
              //Printing to screen and file
    /*          for(int i=0;i<buffer.length;i++)
                   if(buffer[i]!=0)
                             System.out.println(buffer[i]);
                             outFile.println(buffer[i]);
              System.out.println("Total primes found between "+args[1]+" and "+toThisNumber+": "+counter.availablePermits()+"\n primes.txt written");
              outFile.println("Total primes found between "+args[1]+" and "+toThisNumber+": "+counter.availablePermits());
              outFile.close();*/                    
    static class Producer extends Thread {
         public void run(){try{
              while(in<buffer.length)     /*'in' should always be more than 'out'.Oherwise the consumer will try to access an empty index*/
                   {     System.out.println("producing");     
                        buffer[in]=fromThisNumber;
                        in++;
                        fromThisNumber++;
                        ready.release();
              catch (Exception e){e.printStackTrace();}
              System.out.println("ALL PRODUCING DONE");
    static class Consumer extends Thread {
         int tempout=0;
         public void run(){try{
              System.out.println("before while"+this.getId());
              while(tempout<=in)
                   System.out.println("before ready"+this.getId()+" "+ready.availablePermits()+" "+in);
                   ready.acquire();
                   System.out.println("before critical.acquire"+this.getId());
                   critical.acquire();
                   tempout=out;
                   out++;
                   critical.release();               
                   if(!isPrime(buffer[tempout]))
                        {System.out.println(buffer[tempout]+" by "+this.getId());buffer[tempout]=0;}
                   else {counter.release();System.out.println("prime added: "+buffer[tempout]+" by "+this.getId());}
                   critical.acquire();
                   tempout=out;
                   System.out.println("tempout:"+tempout+" of "+this.getId());
                   critical.release();
              System.out.println("ALL CONSUMING DONE"+this.getId());
         catch(Exception e){e.printStackTrace();}
         //Prime number-checking method     
         public boolean isPrime(int n){
              for(int i=2;i<=(n/2);i++)
                   if(n%i==0)
                        return false;
              return true;
    ======================
    import java.util.concurrent.Semaphore;
    import java.io.*;
    /* 3 questions to ask Barlas
    * Why error if I start the Consumer threads before Producer
    * Why does the counter semaphore always give a +1 result at the end
    * Is there a way I can verify that all the work is not being done by only 1 consumer thread? In other words, the workload is being shared properly
    * if I put ready.acquire() outside or inside the while loop, its not making any difference, why?
    * Strangely, its not making any difference if I playing with the release() and aquire() of the semaphores, WHY?!?!
    public class Assign1 {
    static int fromThisNumber;
    static int toThisNumber;
    static int numberOfThreads;
    static int buffer[];
    static Semaphore ready;          /*This semaphore is used by the Producer to signal
                                       an "OK" to the consumers*/
    static Semaphore critical; /*This is a Mutex semaphore. It allows only 1 consumer
                                       to enter his critical section.
    static Semaphore counter;     /*This semaphore acts as a counter.
                                  Instead of having a global variable
                                       incremented each time, we just release()
                                       this semephore when we find a prime number
                                       Because remember that release() increments permits
    static Producer prod;
    static Consumer cons[];
    static int in=0;
    static int out=0;
    static PrintWriter outFile;
         public static void main (String args[]){
              try{
                   outFile=new PrintWriter(new FileWriter("primes.txt"));
                   }catch(Exception e){}
              numberOfThreads=Integer.parseInt(args[0]);
              fromThisNumber=Integer.parseInt(args[1]);
              toThisNumber=Integer.parseInt(args[2]);
              buffer=new int[Integer.parseInt(args[2])-Integer.parseInt(args[1])+1];
              ready=new Semaphore(0,false); /*We initialise it to 0 because we wait
                                                      for the Producer to produce atleast a
                                                      item. Suppose ready was 1 and if
                                                      Consumer ran first he would be in an
                                                      empty buffer */
              critical=new Semaphore (1,false);/*We initialise it to 1 because when
                                                      the first Consumer thread tries
                                                      to enter its critical section, it
                                                      should be allowed to;
                                                      Subsequent threads will have to
                                                      wait since only 1 thread can
                                                      access its critical section at a time*/
              counter=new Semaphore(0,false); // duh!
              cons=new Consumer[numberOfThreads-1]; /*numberOfThreads-1 because 1 thread
                                                                is taken by the Producer*/
              //Creating Producer object
              prod=new Producer();
              //Creating the Consumer object and start the thread.
              for(int i=0;i<cons.length;i++)
                        cons[i]=new Consumer();
                        cons[i].start();
              prod.start();          
              //Printing to screen and file
    /*          for(int i=0;i<buffer.length;i++)
                   if(buffer[i]!=0)
                             System.out.println(buffer[i]);
                             outFile.println(buffer[i]);
              System.out.println("Total primes found between "+args[1]+" and "+toThisNumber+": "+counter.availablePermits()+"\n primes.txt written");
              outFile.println("Total primes found between "+args[1]+" and "+toThisNumber+": "+counter.availablePermits());
              outFile.close();*/                    
    static class Producer extends Thread {
         public void run(){try{
              while(in<buffer.length)     /*'in' should always be more than 'out'.Oherwise the consumer will try to access an empty index*/
                   {     System.out.println("producing");     
                        buffer[in]=fromThisNumber;
                        in++;
                        fromThisNumber++;
                        ready.release();
              catch (Exception e){e.printStackTrace();}
              System.out.println("ALL PRODUCING DONE");
    static class Consumer extends Thread {
         int tempout=0;
         public void run(){try{
              System.out.println("before while"+this.getId());
              while(tempout<=in)
                   System.out.println("before ready"+this.getId()+" "+ready.availablePermits()+" "+in);
                   ready.acquire();
                   System.out.println("before critical.acquire"+this.getId());
                   critical.acquire();
                   tempout=out;
                   out++;
                   critical.release();               
                   if(!isPrime(buffer[tempout]))
                        {System.out.println(buffer[tempout]+" by "+this.getId());buffer[tempout]=0;}
                   else {counter.release();System.out.println("prime added: "+buffer[tempout]+" by "+this.getId());}
                   critical.acquire();
                   tempout=out;
                   System.out.println("tempout:"+tempout+" of "+this.getId());
                   critical.release();
              System.out.println("ALL CONSUMING DONE"+this.getId());
         catch(Exception e){e.printStackTrace();}
         //Prime number-checking method     
         public boolean isPrime(int n){
              for(int i=2;i<=(n/2);i++)
                   if(n%i==0)
                        return false;
              return true;
    ===========================
    BTW, when I tried to change extends Thread to implements Runnable I got some kinda of error.
    Actually, my program is pretty complete... its just that something if messed up in my Consumer's run() method's while loop... I think
    I know guys its crazy to ask ya'll to look at so much code, but.... I'd really appreciate it. This assignment is killing me, been at it since 10 hours now....

  • ConsumerFlowLimit set to 0 working incorrectly

    I've got a simple program which creates a queue and sets the consumerFlowLimit on that queue. Then it creates a producer for the queue which loads the queue with 10 messages. The payload of each message is the order it was created in. So the first message is a text message "1", the second message is a text message "2", etc.
    The program then creates two consumers. The first is called "c5" because it reads a single message, prints the message, then sleeps for 5 seconds. The second is named "c1" because it does the same, but sleeps for only one second.
    When I set consumerFlowLimit on the queue to -1 (unlimited) I get what I expect. The 10 messages get randomly "pre-assigned" to the queues, and I get output (something) like this:
    c1 read message: 2 Mon Jul 14 08:37:53 PDT 2008
    c5 read message: 1 Mon Jul 14 08:37:53 PDT 2008
    c1 read message: 5 Mon Jul 14 08:37:54 PDT 2008
    c1 read message: 7 Mon Jul 14 08:37:55 PDT 2008
    c1 read message: 9 Mon Jul 14 08:37:56 PDT 2008
    c5 read message: 3 Mon Jul 14 08:37:58 PDT 2008
    c5 read message: 4 Mon Jul 14 08:38:03 PDT 2008
    c5 read message: 6 Mon Jul 14 08:38:08 PDT 2008
    c5 read message: 8 Mon Jul 14 08:38:13 PDT 2008
    c5 read message: 10 Mon Jul 14 08:38:18 PDT 2008
    What I want, however, is for the messages to be pulled off and printed in order, from 1 to 10. So I don't want the broker pre-assigning any of the messages -- I want the messages assigned to consumers only when they ask for them. So, I set the consumerFlowLimit to 0. But the setting of 0 behaves exactly like it does for the setting of -1. I think this is a bug and want to know if I should enter it as such. I see the same behavior for both the 1.3 and 1.4 brokers.
    I do know that I'm successfully setting consumerFlowLimit, not only because I query and print it after I set it , but because when I set it to 1, it works as expected: only one message gets pre-assigned and output looks like this:
    c5 read message: 1 Mon Jul 14 09:12:32 PDT 2008
    c1 read message: 2 Mon Jul 14 09:12:32 PDT 2008
    c1 read message: 4 Mon Jul 14 09:12:33 PDT 2008
    c1 read message: 5 Mon Jul 14 09:12:34 PDT 2008
    c1 read message: 6 Mon Jul 14 09:12:35 PDT 2008
    c1 read message: 7 Mon Jul 14 09:12:36 PDT 2008
    c5 read message: 3 Mon Jul 14 09:12:37 PDT 2008
    c1 read message: 8 Mon Jul 14 09:12:37 PDT 2008
    c1 read message: 10 Mon Jul 14 09:12:38 PDT 2008
    c5 read message: 9 Mon Jul 14 09:12:42 PDT 2008
    Thanks if you can help.

    Challenge to Sun: Explain why there are no settings that allow this program to finish in 8 seconds every time it runs. 1 producer queues 10 messages. 2 consumers drain the queue. One sleeps 1 second after it dequeues a message, the other sleeps 5 seconds. Two messages should be dequeued at the 0 second marker and the 5 second marker, and one message at other second markers. 10 messages in 8 seconds. Should be easy, but openmq can't do it.
    Command line looks like this once you compile it:
    java -cp build\classes;lib\imqjmx.jar;lib\jms.jar;lib\imq.jar my.example.Flow 1 -1
    The parameters are for the consumerFlowLimit and maxNumActiveConsumers attributes. Set them any way you like. Nothing will get you to 8 seconds consistently.
    package my.example;
    import java.util.Date;
    import javax.jms.Connection;
    import javax.jms.DeliveryMode;
    import javax.jms.Destination;
    import javax.jms.MessageConsumer;
    import javax.jms.MessageProducer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.management.Attribute;
    import javax.management.MBeanServerConnection;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import com.sun.messaging.AdminConnectionFactory;
    import com.sun.messaging.ConnectionConfiguration;
    import com.sun.messaging.jms.management.server.DestinationAttributes;
    import com.sun.messaging.jms.management.server.DestinationType;
    import com.sun.messaging.jms.management.server.MQObjectName;
    public class Flow {
    private static com.sun.messaging.ConnectionFactory
    connectionFactory = new com.sun.messaging.ConnectionFactory();
    private String brokerName;
    private int brokerPort;
    private long flowLimit;
    private int activeConsumers;
    public Flow(String brokerName, int brokerPort, long flowLimit, int activeConsumers) {
    this.brokerName = brokerName;
    this.brokerPort = brokerPort;
    this.flowLimit = flowLimit;
    this.activeConsumers = activeConsumers;
    public void start() {
    try {
    connectionFactory.setProperty(ConnectionConfiguration.imqAddressList,
    this.brokerName + ":" + this.brokerPort);
    Connection connection = connectionFactory.createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    String queueName = "myQueue";
    Destination myQueue = session.createQueue(queueName);
    MessageProducer producer = session.createProducer(myQueue);
    producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    AdminConnectionFactory acf = new AdminConnectionFactory();
    JMXConnector jmxc = acf.createConnection("admin", "admin");
    MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
    ObjectName destConfigName = MQObjectName.createDestinationConfig(DestinationType.QUEUE, queueName);
    Attribute attr = new Attribute(DestinationAttributes.CONSUMER_FLOW_LIMIT, flowLimit);
    mbsc.setAttribute(destConfigName, attr);
    attr = new Attribute(DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS, activeConsumers);
    mbsc.setAttribute(destConfigName, attr);
    Long longAttrValue = (Long)mbsc.getAttribute(destConfigName, DestinationAttributes.CONSUMER_FLOW_LIMIT);
    Integer attrValue = (Integer)mbsc.getAttribute(destConfigName, DestinationAttributes.MAX_NUM_ACTIVE_CONSUMERS);
    jmxc.close();
    System.out.println( "consumerFlowLimit: " + longAttrValue );
    System.out.println( "maxNumActiveConsumers: " + attrValue);
    // Pre-load the queue with 10 messages numbered from 1 to 10
    for (int i = 1; i <= 10; i++) {
    TextMessage message = session.createTextMessage();
    message.setText(String.valueOf(i));
    producer.send(message);
    System.out.println("");
    // Kick off two consumers
    new Thread(new Consumer("c5", 5)).start();
    new Thread(new Consumer("c1", 1)).start();
    } catch (Exception e) {
    System.out.println( "Exception occurred: " + e);
    public static void main(String[] args) {
    String limit = "1";
    String activeConsumers = "-1";
    if (args.length > 0) {
    limit = args[0];
    if (args.length > 1) {
    activeConsumers = args[1];
    Flow flow = new Flow("localhost", 7676, Long.parseLong(limit), Integer.parseInt(activeConsumers));
    flow.start();
    class Consumer implements Runnable {
    private String name;
    private int sleepSeconds;
    public Consumer(String name, int sleepSeconds) {
    this.name = name;
    this.sleepSeconds = sleepSeconds;
    public void run() {
    try {
    String queueName = "myQueue";
    Connection connection = connectionFactory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Destination myQueue = session.createQueue(queueName);
    MessageConsumer consumer = session.createConsumer(myQueue);
    connection.start();
    while (true) {
    TextMessage message = (TextMessage) consumer.receive();
    System.out.println(this.name + " read message: " + message.getText() + "\t" + (new Date()));
    Thread.sleep(sleepSeconds * 1000);
    } catch (Exception e) {
    System.out.println("Exception occurred: " + e);
    }

  • High thread count on store.exe

    I understand that the mdb store process utilizes as much memory as is available.  My question is regarding the thread count on the process.  One of the three mailbox servers tends to have a higher thread count than the other two.  It
    usually ranges from 150 to 200 (while the other two are usually 130 to 150) but today it is a little over 300.  The rpc thread count on all the mailbox servers stays pretty low (60 or under) and the rpc thread count on the CAS servers usually
    hang out around 55-65, so that's all good.  All three mailbox servers also use VERY close to the same amount of memory all the time, so that doesn't seem to be making a difference.  I am just trying to determine why the thread count is noticably
    higher.  This server and one of other mailbox servers replicate the public folder database, and I can understand why that would account for some additional activity, but you would think the thread count would be higher on the other server with the public
    folder database as well, but it stays pretty low.  Hardware-wise these servers are all identical.  So is there something I can monitor in perf mon for instance?  I don't want to use experfwiz because that monitors everything under the sun and
    I need it a bit more centralized.  I have googled all over the place and the only thing I can find is that with newer versions of exchange this thread count ranges from 200-300 on heavy usage, and exch07 can handle up to 500 threads, so I can't even find
    which specific things to monitor that directly correlate with this issue.  So while I understand that it's not really too high, I would like to find out why it deviates from the norm if the other two servers are equal for all intents and purposes (same
    hardware, balanced DAG. etc).  I would like to mitigate any potential issues.  Thank you.

    Hi pchw,
    Thank you for your question.
    I am sorry that we could not find the specific things to monitor this issuer directly, because there are many reason which caused it. For example: virus, big size attachment in queue, hardware performance and so on. We could refer to the following steps
    to troubleshoot:
    Restart the service of “Microsoft Exchange transport”;
    Create a new database and move mailbox to new mailbox;
    We could do some disk health check if the load test is normal;
    Collect related application log and system log to
    [email protected] for our troubleshooting.
    We could run SDP on Exchange server and send it to
    [email protected] for our troubleshooting.
    http://blogs.msdn.com/b/askie/archive/2012/05/22/introduction-to-support-diagnostics-platform-sdp.aspx
    We could use tools  and logs to analysis if there are anything wrong or abnormal on Exchange server 2013. our bottle neck is disk IO latency, store.exe do require some CPU usage, but if our disk IO speed can keep in a normal range, the
    CPU usage will be smaller. Exchange is highly rely on disk IO performance because it need lots of IO operation regarding to transaction log and database file. If Disk IO has a high latency, I will definitely impact store.exe, if it`s getting seriously sometimes
    it may cause store.exe no response.        
    We could refer to the following link:
    https://technet.microsoft.com/en-us/library/ee832791(v=exchg.141).aspx
    If there are any questions regarding this issue, please be free to let me know. 
    Best Regard,
    Jim

  • Limited subject characters count when creating a new thread in Portal 7.3 forums

    Hello,
    i was wondering if and how you can change the max. characters for the subject when creating a new thread in Portal 7.3 forums.
    It seems like the character count is limited to 75 characters for subjects.
    I didn't find any suitable property, in the forums admin console, for that issue.
    Thanks

    Hi Andrzej,
    Have faced a similar issue in EP 7.01. It was due to the missing Super Admin access - Save was clocking & timing out.
    Upgraded the Admin permissions and this issue was resolved.
    Hope this helps.

  • What is the max. count of internal worker-threads in B1iSN 88?

    Hi Experts,
    We have an installation of B1iSN 88 with an ECC 6.0 and 54 SAP Business One installation. The Hardware is 8 Core multi-threads processor. 32GB Memory. Now we have a problem with the queuing of Events. What we have found is that the configuration of the internal worker-threads is set to -1(please see below for the settings). We change the settings to xcl.threads=20 and it improves the queuing. My question is what is the max. count of internal worker-threads per core? so that we can know how many worker will set and if we need to upgrade the CPU to 16 Core..
    # The max. count of internal worker-threads afforded for the internal Scheduler (defaults to 1)
    # The value of 0 means that there is no limit (what in general should not be set up).
    # A negative value means the count of threads per available processor
    xcl.threads=-1
    Regards,
    Wilson

    You're very welcome.
    Yes, they are very nice machines. 
    What a jump in performance when I swapped out the Pentium 4 620 mine had, for the PD 945, and tossed in 4 GB of memory.
    That box will also run the Radeon HD 6570 with no problem too, which is what I put in mine.
    The downside of that model is that there are no settings for ahci or raid.
    I own or have owned every CMT since the d510 with the exception of the dc7900.
    My main PC is now the 8200 Elite CMT which I installed W8.1 on.
    It has an i7-2600 processor and 32 GB of memory, 1 TB SATA III hard drive.
    I threw in a Radeon HD 6670 in that one.
    Best Regards,
    Paul

  • 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.
    Thanks

    Self 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

  • Execute queue thread count set back?

    I have a script which automatically sets up execute queues (and their thread counts) for either an admin server or two managed servers in a cluster (depending on whether it's a standalone deployment). Upon building a domain, the script connects to a temporary server and sets everything up, at this point it appears all the queues and thread counts are set correctly. However once the build has completed and the generated config.xml is checked, three queues don't have any thread counts associated with them at all; these queues are:
    ThreadQueue (Count)
    wli.internal.ProcessInstanceInfo (15)
    wli.internal.ProcessTracking (15)
    wli.process.event.thread.pool (15)
    The other queues have all their thread counts set correctly. Does anybody know how these queues are used and if this will have an impact on the above problem?

    No worries about this post, the reason has been solved.
    Reason
    The default thread count for execute queues in development mode is 15 threads, therefore if a queue is specified with this value it won't be set in the config.xml (when an execute queue doesn't have a ThreadCount attribute, the default is used instead). The trouble is that when the server is started we enter production mode where the default thread count is 25 threads instead.

  • Storage Thread Count

    I'm trying to write up advice for Storage node thread count.
    Obviously, this is dependent of the machines - we have 48G 8processor machines, running 20 x2G Storage nodes and 2 x 2G Proxy nodes.
    My understand is that when you don't have a cache-store you would set the thread-count to 0 (run on service thread).
    I'm wondering how one might calculate this if you have a cache store ( and whether its different if you have write through / behind ).
    I can see that in write-through it will spend most of the time with the database and a higher thread count would be good (its a pity its not a variable size pool with min and max).
    I'm not sure about write-behind - I can imagine that a low thread count might be reasonable here.
    I'm sure Rob (or others ) have a good formula for this.
    Best, Andrew.

    I have a brief recollection (may be wrong about this) that there is some info (via JMX) about average thread pool usage that may be of assistance (if the average is close to your specified max it may pay off to increase it furthe and see if throughput goes up or down, if the average is close to zero it may be just as well to use zero thread count rather than what is used at the moment).
    One must also decide what is most important - to max out throughput or to limit median response time. With a larger thread pool more queries can be in progress at the same time (hopefully reducing median responce time since long runing queries dont lock out other queries) but resources will be split between them (at least if the thread count is larger than the number of cores) making the total throughput lower...
    /Magnus

  • Thread count tuning

    Hi!
    We are running a weblogic 5.1 server for jsp/servlet/ejb behind an apache web
    server, via the wls/apache bridge. As the number of users increased we expereienced
    slow response times. We checked thread dumps from peak hours and saw that all
    servlet threads were busy writing to network sockets. Still, if we check the internet
    line usage, we are not using up all our bandwith.
    We've managed to solve this by adding more threads to our wls server (36 servlet
    threads, 46 totally). This has however slowed down our database somewhat since
    we have to increase the connection pool size with the number of server threads.
    So my question would be: is there some other, more elegant, way to solve this?
    Having 46 execute threads seems pretty much (15 is recommended from BEA). Ideally
    I would like the wls threads to write their results as quickly as they can to
    the apache server, disconnect from the socket and leave actual work of writing
    all the data back to the end user's browser to apache. My network knowledge is
    pretty limited so I'm not sure if this is possible.
    /Mattias

    Why do you need to have the maximum thread count equal to the maximum number of simulatneous users? You'll never end up with a system that has 60,000 threads.
    If you are doing traditional-style HTTP, then typically you can support many thousands of users with just a few threads. For example, our SPECjAppServ er submissions use about 40 threads to handle 4000 clients. It all depends on how many requests each client actually makes per second, and how long each request takes. If the clients are idle for long periods of time, you could handle 10s of thousands with just a few threads.
    The keep-alive tuning is also critical in that scenario, as the server will eventually start disconnecting clients, who will re-create the TCP connections. That works seemlessly from a functional point of view, but isn't necessarily the optimal thing for performance.
    On the other hand, if you're trying to use a Web 2.0-style HTTP request where you simulate server pushes by having the servlet request block, then yes, in 8.1 you will need one thread per client, but you'll be bound by OS and other system constraints on the number of threads the process can have. You'd be much better off in that case using the Asynchronous Request processing features being added to AS 9.1 (see Sun's project glassfish for details).
    For information on configuring the thread count for 8.1, see:
    http://docs.sun.com/source/819-0215/httpservice.html
    In particular -- the section on Configuring HTTP Service Request Processing Threads.

  • Thread-count

    I understand that the thread-count determines the number of service threads for a particular service. So, if the thread-count for the ordersCache is 10, then a max of 10 OrderProcessor agents would be able to process orders at the same time.
    Questions:
    1. What happens if an 11th agent is invoked? Does it wait in a queue, waiting for a service thread to be freed? If so, how long does it wait?
    2. For pure reads, does the thread-count matter? For instance, if I have a "public static NamedCache testCache" shared across 15 threads that are reading from the cache and if the thread-count defined is 10, then does that mean that only 10 threads can do "cache.get" at the same time? If so, what happens when the 11th thread calls "cache.get"? Does it wait?
    Thanks
    Ghanshyam

    Hi Ghanshyam,
    I understand that the thread-count determines the
    number of service threads for a particular service.
    So, if the thread-count for the ordersCache is 10,
    then a max of 10 OrderProcessor agents would be able
    to process orders at the same time.Yes.
    Questions:
    1. What happens if an 11th agent is invoked? Does it
    wait in a queue, waiting for a service thread to be
    freed? If so, how long does it wait?Yes, it waits until a thread is available.
    Starting in release 3.3, it will be possible to specify a time-out and/or a priority for your operations.
    2. For pure reads, does the thread-count matter? For
    instance, if I have a "public static NamedCache
    testCache" shared across 15 threads that are reading
    from the cache and if the thread-count defined is 10,
    then does that mean that only 10 threads can do
    "cache.get" at the same time? If so, what happens
    when the 11th thread calls "cache.get"? Does it
    wait?Yes, it waits. An in-memory read is typically so quick that it would not be an issue, but it could be if the gets were going to a CacheLoader and the database was slow or blocked. In the upcoming 3.3 release, it will be possible to specify time-outs for those operations.
    Peace,
    Cameron Purdy
    Tangosol Coherence: The Java Data Grid

  • Changing thread count in WebLogic 10.3

    Hi
    We have migrated from WebLogic 8.1 to 10.3.
    how do i change the thread count in weblogic 10.3? i saw options in weblogic 8.1 and 9.2 but not in 10.3.
    Can anybody throw some light on this.

    From WL9.0 onwards, the Weblogic thread management mechanism is changed.Now no need to set the thread count. WLS itself is intelligent enough to do the self tuning of the thread pool.
    To prioritize and schedule your application requests,you can create work managers and can associate request classes/constraints.You can refer the below article to understand the workload management using work managers.
    http://www.oracle.com/technology/pub/articles/dev2arch/2006/01/workload-management.html
    Inigo Prince

  • OnAlarm/wait thread count configuration in BPEL

    BPEL 10g, We have a com.oracle.bpel.expirationAgent.threadCount property to set the thread count for OnAlarm/wait. ORACLE_HOME/bpel/domain/DOMAIN_NAME/config/resources-quartz.properties.
    BPEL 11g, Can you please point me the configuration file to set the thread count for OnAlarm/wait. I could not find the resources-quartz.properties in SOA 11g.

    Have you been able to find the file or a similar properties location in 11g? I am also looking for it.

  • Query Regarding Execute Thread Count

    Hi,
    My understanding of Execute Thread Count is the threads which are assigned to service
    requests coming to Weblogic Server.
    In our current architecture a request for generating report is directed to EJB method
    which makes a call to another Server (Report Server for executing reports), the report
    Server in turn calls the EJB residing on Weblogic Server for getting the data.
    So, is my assumption correct that with our current architecture we are limited to
    concurrency of Execute Thread Count -1. (Every request for report will consume 2
    Excute threads, and others will have to wait till the first request gets completed
    and 2 threads are freed).
    I also read from the postings that Weblogic takes some of the threads, so it actually
    will be limited to (Execute thread count - Weblogic Held- 1).
    Please corect me if I am wrong.
    Thanks and Regards
    Rashmi

    Hi,
    Thanks very much for the suggestion. I tried, and it is using 2 Execute Threads.
    Thanks
    Rashmi
    "Dave Martin" <[email protected]> wrote:
    >
    Rashmi:
    If you are interested in answering the question rigorously, why not just
    throw a
    fake exception along both the report generation path and the runReport method
    of
    the ReportServer, then record their stack traces to a file for comparison?
    From the sounds of it, your app wants to make the actual report generation
    asynchronous
    from the post of the reporting request. If they're really asynchronous,
    then your
    ReportServer must have some kind of blocking queue that will "wake up" when
    it has
    work to be done. Depending on how you implemented this, your runReport
    method may
    not be running a WebLogic execute thread at all.
    Seems to me that you should be thinking of this as consuming one execute
    thread regardless.
    Even if the two pieces of work are asynchronous, the first thread finished
    its work
    at the point that it posts to the second thread (at least, per your description).
    So at any one time, at max one execute thread is being consumed per request.
    But capture the stack traces and have a look for yourself.
    Dave Martin
    "Rashmi S" <[email protected]> wrote:
    Hi,
    Thanks for your reply.The reason why I say 2 threads will be consumed is
    as follows
    1. First execute thread will be used for the request to Weblogic Server
    to run the
    report originating from a client.
    2. Now, within the ReportServices EJB there is a call to Report Serverto
    run the
    report. The running of report is done on the Report Server which is ona
    separate
    m/c. Within the runReport method of the Report Server ,the data is fetched
    for the
    report by making a context look-up of another session EJB which fetches
    the data.
    So, the second Execute thread will be consumed for executing the EJB that
    fetches
    the data.
    Am I correct?
    Thanks and Regards
    Rashmi
    "Cameron Purdy" <[email protected]> wrote:
    Incoming requests (from outside the server) use one thread for the duration
    of their processing. Previous to their processing they are queued until
    a
    thread is available. So you would use one thead per concurrent request,
    not
    two. Otherwise, it sounds right.
    Peace,
    Cameron Purdy
    Tangosol, Inc.
    Clustering Weblogic? You're either using Coherence, or you should be!
    Download a Tangosol Coherence eval today at http://www.tangosol.com/
    "Rashmi S" <[email protected]> wrote in message
    news:[email protected]...
    Hi,
    My understanding of Execute Thread Count is the threads which are assignedto service
    requests coming to Weblogic Server.
    In our current architecture a request for generating report is directedto EJB method
    which makes a call to another Server (Report Server for executingreports), the report
    Server in turn calls the EJB residing on Weblogic Server for getting
    the
    data.
    So, is my assumption correct that with our current architecture we arelimited to
    concurrency of Execute Thread Count -1. (Every request for report willconsume 2
    Excute threads, and others will have to wait till the first request
    gets
    completed
    and 2 threads are freed).
    I also read from the postings that Weblogic takes some of the threads,so
    it actually
    will be limited to (Execute thread count - Weblogic Held- 1).
    Please corect me if I am wrong.
    Thanks and Regards
    Rashmi

  • Configuring Execute Thread Count

    Hi,
    I am working on a webapp thats using Weblogic 8.1 (SP2) as the application server.
    The admin server for Weblogic currently provides 2 execute threads as default.
    However I was wondering if I can configure the admin server for a higher number
    of execute threads.
    I have the following questions:
    1.> Does configuring the number of threads for the admin sever provide any additional
    value? has any one come across a big application where more than 2 execute threads
    are required for the admin server?
    2.> If yes, is it possible to configure the number of execute threads for the
    admin server? I did some search on the bea website and didnt find anything that
    explicitly says that the property is configurable. Is this true?
    3.> If it is configurable, then how do we go about setting it up?
    If anyone has worked around this and can provide me with any information or references,
    that would be great.
    Thanks

              Sriram,
              Take a look at the following URL for setting the thread count in WLS 6.1
              http://edocs.bea.com/wls/docs61/perform/WLSTuning.html#1112343
              Chuck Nelson
              Developer Relations Engineer
              BEA Technical Support
              

Maybe you are looking for