Merge pull request #2299 from olamy/feature/available_processors
#2298 Override the processor number with an environment variable
This commit is contained in:
commit
cf0b6140fe
|
@ -47,6 +47,7 @@ import org.eclipse.jetty.annotations.AnnotationParser.Handler;
|
||||||
import org.eclipse.jetty.plus.annotation.ContainerInitializer;
|
import org.eclipse.jetty.plus.annotation.ContainerInitializer;
|
||||||
import org.eclipse.jetty.util.JavaVersion;
|
import org.eclipse.jetty.util.JavaVersion;
|
||||||
import org.eclipse.jetty.util.MultiException;
|
import org.eclipse.jetty.util.MultiException;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.StringUtil;
|
import org.eclipse.jetty.util.StringUtil;
|
||||||
import org.eclipse.jetty.util.TypeUtil;
|
import org.eclipse.jetty.util.TypeUtil;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
|
@ -453,7 +454,7 @@ public class AnnotationConfiguration extends AbstractConfiguration
|
||||||
start = System.nanoTime();
|
start = System.nanoTime();
|
||||||
|
|
||||||
//execute scan, either effectively synchronously (1 thread only), or asynchronously (limited by number of processors available)
|
//execute scan, either effectively synchronously (1 thread only), or asynchronously (limited by number of processors available)
|
||||||
final Semaphore task_limit = (isUseMultiThreading(context)? new Semaphore(Runtime.getRuntime().availableProcessors()):new Semaphore(1));
|
final Semaphore task_limit = (isUseMultiThreading(context)? new Semaphore(ProcessorUtils.availableProcessors()):new Semaphore( 1));
|
||||||
final CountDownLatch latch = new CountDownLatch(_parserTasks.size());
|
final CountDownLatch latch = new CountDownLatch(_parserTasks.size());
|
||||||
final MultiException me = new MultiException();
|
final MultiException me = new MultiException();
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ import org.eclipse.jetty.io.MappedByteBufferPool;
|
||||||
import org.eclipse.jetty.io.ssl.SslClientConnectionFactory;
|
import org.eclipse.jetty.io.ssl.SslClientConnectionFactory;
|
||||||
import org.eclipse.jetty.util.Fields;
|
import org.eclipse.jetty.util.Fields;
|
||||||
import org.eclipse.jetty.util.Jetty;
|
import org.eclipse.jetty.util.Jetty;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.Promise;
|
import org.eclipse.jetty.util.Promise;
|
||||||
import org.eclipse.jetty.util.SocketAddressResolver;
|
import org.eclipse.jetty.util.SocketAddressResolver;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
||||||
|
@ -213,7 +214,7 @@ public class HttpClient extends ContainerLifeCycle
|
||||||
byteBufferPool = new MappedByteBufferPool(2048,
|
byteBufferPool = new MappedByteBufferPool(2048,
|
||||||
executor instanceof ThreadPool.SizedThreadPool
|
executor instanceof ThreadPool.SizedThreadPool
|
||||||
? ((ThreadPool.SizedThreadPool)executor).getMaxThreads()/2
|
? ((ThreadPool.SizedThreadPool)executor).getMaxThreads()/2
|
||||||
: Runtime.getRuntime().availableProcessors()*2);
|
: ProcessorUtils.availableProcessors()*2);
|
||||||
addBean(byteBufferPool);
|
addBean(byteBufferPool);
|
||||||
|
|
||||||
if (scheduler == null)
|
if (scheduler == null)
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.eclipse.jetty.client.HttpDestination;
|
||||||
import org.eclipse.jetty.client.Origin;
|
import org.eclipse.jetty.client.Origin;
|
||||||
import org.eclipse.jetty.client.api.Connection;
|
import org.eclipse.jetty.client.api.Connection;
|
||||||
import org.eclipse.jetty.io.EndPoint;
|
import org.eclipse.jetty.io.EndPoint;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.Promise;
|
import org.eclipse.jetty.util.Promise;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedObject;
|
import org.eclipse.jetty.util.annotation.ManagedObject;
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@ public class HttpClientTransportOverHTTP extends AbstractConnectorHttpClientTran
|
||||||
{
|
{
|
||||||
public HttpClientTransportOverHTTP()
|
public HttpClientTransportOverHTTP()
|
||||||
{
|
{
|
||||||
this(Math.max(1, Runtime.getRuntime().availableProcessors() / 2));
|
this(Math.max( 1, ProcessorUtils.availableProcessors() / 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpClientTransportOverHTTP(int selectors)
|
public HttpClientTransportOverHTTP(int selectors)
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.eclipse.jetty.client.api.Request;
|
||||||
import org.eclipse.jetty.fcgi.FCGI;
|
import org.eclipse.jetty.fcgi.FCGI;
|
||||||
import org.eclipse.jetty.http.HttpFields;
|
import org.eclipse.jetty.http.HttpFields;
|
||||||
import org.eclipse.jetty.io.EndPoint;
|
import org.eclipse.jetty.io.EndPoint;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.Promise;
|
import org.eclipse.jetty.util.Promise;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedObject;
|
import org.eclipse.jetty.util.annotation.ManagedObject;
|
||||||
|
@ -44,7 +45,7 @@ public class HttpClientTransportOverFCGI extends AbstractConnectorHttpClientTran
|
||||||
|
|
||||||
public HttpClientTransportOverFCGI(String scriptRoot)
|
public HttpClientTransportOverFCGI(String scriptRoot)
|
||||||
{
|
{
|
||||||
this(Math.max(1, Runtime.getRuntime().availableProcessors() / 2), false, scriptRoot);
|
this( Math.max( 1, ProcessorUtils.availableProcessors() / 2), false, scriptRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpClientTransportOverFCGI(int selectors, boolean multiplexed, String scriptRoot)
|
public HttpClientTransportOverFCGI(int selectors, boolean multiplexed, String scriptRoot)
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.eclipse.jetty.http.HttpFields;
|
||||||
import org.eclipse.jetty.http.HttpHeader;
|
import org.eclipse.jetty.http.HttpHeader;
|
||||||
import org.eclipse.jetty.http.HttpScheme;
|
import org.eclipse.jetty.http.HttpScheme;
|
||||||
import org.eclipse.jetty.proxy.AsyncProxyServlet;
|
import org.eclipse.jetty.proxy.AsyncProxyServlet;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specific implementation of {@link org.eclipse.jetty.proxy.AsyncProxyServlet.Transparent} for FastCGI.
|
* Specific implementation of {@link org.eclipse.jetty.proxy.AsyncProxyServlet.Transparent} for FastCGI.
|
||||||
|
@ -111,7 +112,7 @@ public class FastCGIProxyServlet extends AsyncProxyServlet.Transparent
|
||||||
String scriptRoot = config.getInitParameter(SCRIPT_ROOT_INIT_PARAM);
|
String scriptRoot = config.getInitParameter(SCRIPT_ROOT_INIT_PARAM);
|
||||||
if (scriptRoot == null)
|
if (scriptRoot == null)
|
||||||
throw new IllegalArgumentException("Mandatory parameter '" + SCRIPT_ROOT_INIT_PARAM + "' not configured");
|
throw new IllegalArgumentException("Mandatory parameter '" + SCRIPT_ROOT_INIT_PARAM + "' not configured");
|
||||||
int selectors = Math.max(1, Runtime.getRuntime().availableProcessors() / 2);
|
int selectors = Math.max( 1, ProcessorUtils.availableProcessors() / 2);
|
||||||
String value = config.getInitParameter("selectors");
|
String value = config.getInitParameter("selectors");
|
||||||
if (value != null)
|
if (value != null)
|
||||||
selectors = Integer.parseInt(value);
|
selectors = Integer.parseInt(value);
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.server.ServerConnector;
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.eclipse.jetty.toolchain.test.TestTracker;
|
import org.eclipse.jetty.toolchain.test.TestTracker;
|
||||||
import org.eclipse.jetty.util.LeakDetector;
|
import org.eclipse.jetty.util.LeakDetector;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
import org.hamcrest.Matchers;
|
import org.hamcrest.Matchers;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
@ -59,8 +60,8 @@ public abstract class AbstractHttpClientServerTest
|
||||||
|
|
||||||
ServerFCGIConnectionFactory fcgiConnectionFactory = new ServerFCGIConnectionFactory(new HttpConfiguration());
|
ServerFCGIConnectionFactory fcgiConnectionFactory = new ServerFCGIConnectionFactory(new HttpConfiguration());
|
||||||
serverBufferPool = new LeakTrackingByteBufferPool(new MappedByteBufferPool.Tagged());
|
serverBufferPool = new LeakTrackingByteBufferPool(new MappedByteBufferPool.Tagged());
|
||||||
connector = new ServerConnector(server, null, null, serverBufferPool,
|
connector = new ServerConnector( server, null, null, serverBufferPool,
|
||||||
1, Math.max(1, Runtime.getRuntime().availableProcessors() / 2), fcgiConnectionFactory);
|
1, Math.max( 1, ProcessorUtils.availableProcessors() / 2), fcgiConnectionFactory);
|
||||||
// connector.setPort(9000);
|
// connector.setPort(9000);
|
||||||
|
|
||||||
server.addConnector(connector);
|
server.addConnector(connector);
|
||||||
|
|
|
@ -32,6 +32,7 @@ import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.function.IntUnaryOperator;
|
import java.util.function.IntUnaryOperator;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedObject;
|
import org.eclipse.jetty.util.annotation.ManagedObject;
|
||||||
import org.eclipse.jetty.util.component.ContainerLifeCycle;
|
import org.eclipse.jetty.util.component.ContainerLifeCycle;
|
||||||
|
@ -68,10 +69,10 @@ public abstract class SelectorManager extends ContainerLifeCycle implements Dump
|
||||||
if (executor instanceof ThreadPool.SizedThreadPool)
|
if (executor instanceof ThreadPool.SizedThreadPool)
|
||||||
{
|
{
|
||||||
int threads = ((ThreadPool.SizedThreadPool)executor).getMaxThreads();
|
int threads = ((ThreadPool.SizedThreadPool)executor).getMaxThreads();
|
||||||
int cpus = Runtime.getRuntime().availableProcessors();
|
int cpus = ProcessorUtils.availableProcessors();
|
||||||
return Math.max(1,Math.min(cpus/2,threads/16));
|
return Math.max(1,Math.min(cpus/2,threads/16));
|
||||||
}
|
}
|
||||||
return Math.max(1,Runtime.getRuntime().availableProcessors()/2);
|
return Math.max(1,ProcessorUtils.availableProcessors()/2);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SelectorManager(Executor executor, Scheduler scheduler)
|
protected SelectorManager(Executor executor, Scheduler scheduler)
|
||||||
|
|
|
@ -50,6 +50,7 @@ import org.eclipse.jetty.http.HttpHeader;
|
||||||
import org.eclipse.jetty.http.HttpHeaderValue;
|
import org.eclipse.jetty.http.HttpHeaderValue;
|
||||||
import org.eclipse.jetty.http.HttpStatus;
|
import org.eclipse.jetty.http.HttpStatus;
|
||||||
import org.eclipse.jetty.util.HttpCookieStore;
|
import org.eclipse.jetty.util.HttpCookieStore;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
|
@ -352,7 +353,7 @@ public abstract class AbstractProxyServlet extends HttpServlet
|
||||||
*/
|
*/
|
||||||
protected HttpClient newHttpClient()
|
protected HttpClient newHttpClient()
|
||||||
{
|
{
|
||||||
int selectors = Math.max(1, Runtime.getRuntime().availableProcessors() / 2);
|
int selectors = Math.max(1,ProcessorUtils.availableProcessors()/2);
|
||||||
String value = getServletConfig().getInitParameter("selectors");
|
String value = getServletConfig().getInitParameter("selectors");
|
||||||
if (value != null)
|
if (value != null)
|
||||||
selectors = Integer.parseInt(value);
|
selectors = Integer.parseInt(value);
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.eclipse.jetty.util.IO;
|
import org.eclipse.jetty.util.IO;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
|
@ -149,7 +150,7 @@ public class ProxyServletLoadTest
|
||||||
startClient();
|
startClient();
|
||||||
|
|
||||||
// Number of clients to simulate
|
// Number of clients to simulate
|
||||||
int clientCount = Runtime.getRuntime().availableProcessors();
|
int clientCount = ProcessorUtils.availableProcessors();
|
||||||
|
|
||||||
// Latch for number of clients still active (used to terminate test)
|
// Latch for number of clients still active (used to terminate test)
|
||||||
final CountDownLatch activeClientLatch = new CountDownLatch(clientCount);
|
final CountDownLatch activeClientLatch = new CountDownLatch(clientCount);
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.eclipse.jetty.io.ByteBufferPool;
|
||||||
import org.eclipse.jetty.io.EndPoint;
|
import org.eclipse.jetty.io.EndPoint;
|
||||||
import org.eclipse.jetty.io.ssl.SslConnection;
|
import org.eclipse.jetty.io.ssl.SslConnection;
|
||||||
import org.eclipse.jetty.util.FutureCallback;
|
import org.eclipse.jetty.util.FutureCallback;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.StringUtil;
|
import org.eclipse.jetty.util.StringUtil;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedObject;
|
import org.eclipse.jetty.util.annotation.ManagedObject;
|
||||||
|
@ -196,7 +197,7 @@ public abstract class AbstractConnector extends ContainerLifeCycle implements Co
|
||||||
for (ConnectionFactory factory:factories)
|
for (ConnectionFactory factory:factories)
|
||||||
addConnectionFactory(factory);
|
addConnectionFactory(factory);
|
||||||
|
|
||||||
int cores = Runtime.getRuntime().availableProcessors();
|
int cores = ProcessorUtils.availableProcessors();
|
||||||
if (acceptors < 0)
|
if (acceptors < 0)
|
||||||
acceptors=Math.max(1, Math.min(4,cores/8));
|
acceptors=Math.max(1, Math.min(4,cores/8));
|
||||||
if (acceptors > cores)
|
if (acceptors > cores)
|
||||||
|
|
|
@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.HttpOutput;
|
import org.eclipse.jetty.server.HttpOutput;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A servlet that uses the Servlet 3.1 asynchronous IO API to server
|
* A servlet that uses the Servlet 3.1 asynchronous IO API to server
|
||||||
|
@ -78,7 +79,7 @@ public class DataRateLimitedServlet extends HttpServlet
|
||||||
if (tmp!=null)
|
if (tmp!=null)
|
||||||
pauseNS=TimeUnit.MILLISECONDS.toNanos(Integer.parseInt(tmp));
|
pauseNS=TimeUnit.MILLISECONDS.toNanos(Integer.parseInt(tmp));
|
||||||
tmp = getInitParameter("pool");
|
tmp = getInitParameter("pool");
|
||||||
int pool=tmp==null?Runtime.getRuntime().availableProcessors():Integer.parseInt(tmp);
|
int pool=tmp==null?ProcessorUtils.availableProcessors():Integer.parseInt(tmp);
|
||||||
|
|
||||||
// Create and start a shared scheduler.
|
// Create and start a shared scheduler.
|
||||||
scheduler=new ScheduledThreadPoolExecutor(pool);
|
scheduler=new ScheduledThreadPoolExecutor(pool);
|
||||||
|
|
|
@ -46,6 +46,7 @@ public class AtomicBiInteger extends AtomicLong
|
||||||
* Atomically set the hi integer value without changing
|
* Atomically set the hi integer value without changing
|
||||||
* the lo value.
|
* the lo value.
|
||||||
* @param hi the new hi value
|
* @param hi the new hi value
|
||||||
|
* @return the hi int value
|
||||||
*/
|
*/
|
||||||
public int setHi(int hi)
|
public int setHi(int hi)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// All rights reserved. This program and the accompanying materials
|
||||||
|
// are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
// and Apache License v2.0 which accompanies this distribution.
|
||||||
|
//
|
||||||
|
// The Eclipse Public License is available at
|
||||||
|
// http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
//
|
||||||
|
// The Apache License v2.0 is available at
|
||||||
|
// http://www.opensource.org/licenses/apache2.0.php
|
||||||
|
//
|
||||||
|
// You may elect to redistribute this code under either of these licenses.
|
||||||
|
// ========================================================================
|
||||||
|
//
|
||||||
|
|
||||||
|
package org.eclipse.jetty.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProcessorUtils return the default value for processor number from {@link Runtime}
|
||||||
|
* but in a virtual environment you can override it using env var <code>JETTY_AVAILABLE_PROCESSORS</code>
|
||||||
|
*/
|
||||||
|
public class ProcessorUtils
|
||||||
|
{
|
||||||
|
private static int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors();
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
String avlProcEnv = System.getenv( "JETTY_AVAILABLE_PROCESSORS" );
|
||||||
|
if (avlProcEnv != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AVAILABLE_PROCESSORS = Integer.parseInt( avlProcEnv );
|
||||||
|
}
|
||||||
|
catch ( NumberFormatException e )
|
||||||
|
{
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the number of processors
|
||||||
|
*/
|
||||||
|
public static int availableProcessors()
|
||||||
|
{
|
||||||
|
return AVAILABLE_PROCESSORS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,6 +28,7 @@ import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedObject;
|
import org.eclipse.jetty.util.annotation.ManagedObject;
|
||||||
import org.eclipse.jetty.util.component.ContainerLifeCycle;
|
import org.eclipse.jetty.util.component.ContainerLifeCycle;
|
||||||
|
@ -78,7 +79,7 @@ public class ExecutorThreadPool extends ContainerLifeCycle implements ThreadPool
|
||||||
|
|
||||||
public ExecutorThreadPool(ThreadPoolExecutor executor, int reservedThreads, ThreadGroup group)
|
public ExecutorThreadPool(ThreadPoolExecutor executor, int reservedThreads, ThreadGroup group)
|
||||||
{
|
{
|
||||||
this(executor, Math.min(Runtime.getRuntime().availableProcessors(), executor.getCorePoolSize()), reservedThreads, group);
|
this( executor, Math.min(ProcessorUtils.availableProcessors(),executor.getCorePoolSize()),reservedThreads,group);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ExecutorThreadPool(ThreadPoolExecutor executor, int minThreads, int reservedThreads, ThreadGroup group)
|
private ExecutorThreadPool(ThreadPoolExecutor executor, int minThreads, int reservedThreads, ThreadGroup group)
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.locks.Condition;
|
import java.util.concurrent.locks.Condition;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
import org.eclipse.jetty.util.annotation.ManagedAttribute;
|
||||||
import org.eclipse.jetty.util.annotation.ManagedObject;
|
import org.eclipse.jetty.util.annotation.ManagedObject;
|
||||||
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
||||||
|
@ -96,7 +97,7 @@ public class ReservedThreadExecutor extends AbstractLifeCycle implements TryExec
|
||||||
{
|
{
|
||||||
if (capacity>=0)
|
if (capacity>=0)
|
||||||
return capacity;
|
return capacity;
|
||||||
int cpus = Runtime.getRuntime().availableProcessors();
|
int cpus = ProcessorUtils.availableProcessors();
|
||||||
if (executor instanceof ThreadPool.SizedThreadPool)
|
if (executor instanceof ThreadPool.SizedThreadPool)
|
||||||
{
|
{
|
||||||
int threads = ((ThreadPool.SizedThreadPool)executor).getMaxThreads();
|
int threads = ((ThreadPool.SizedThreadPool)executor).getMaxThreads();
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
|
@ -97,7 +98,7 @@ public class ThreadPoolBudget
|
||||||
*/
|
*/
|
||||||
public ThreadPoolBudget(ThreadPool.SizedThreadPool pool)
|
public ThreadPoolBudget(ThreadPool.SizedThreadPool pool)
|
||||||
{
|
{
|
||||||
this(pool,Math.min(Runtime.getRuntime().availableProcessors(),pool.getMinThreads()));
|
this(pool,Math.min(ProcessorUtils.availableProcessors(),pool.getMinThreads()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// All rights reserved. This program and the accompanying materials
|
||||||
|
// are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
// and Apache License v2.0 which accompanies this distribution.
|
||||||
|
//
|
||||||
|
// The Eclipse Public License is available at
|
||||||
|
// http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
//
|
||||||
|
// The Apache License v2.0 is available at
|
||||||
|
// http://www.opensource.org/licenses/apache2.0.php
|
||||||
|
//
|
||||||
|
// You may elect to redistribute this code under either of these licenses.
|
||||||
|
// ========================================================================
|
||||||
|
//
|
||||||
|
|
||||||
|
package org.eclipse.jetty.util;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* we cannot really add env var in a unit test... so only test we get default value
|
||||||
|
*/
|
||||||
|
public class ProcessorUtilsTest
|
||||||
|
{
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void get_default_value(){
|
||||||
|
Assert.assertEquals(Runtime.getRuntime().availableProcessors(), ProcessorUtils.availableProcessors());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -47,7 +47,7 @@ public class QueueBenchmarkTest
|
||||||
@Test
|
@Test
|
||||||
public void testQueues() throws Exception
|
public void testQueues() throws Exception
|
||||||
{
|
{
|
||||||
int cores = Runtime.getRuntime().availableProcessors();
|
int cores = ProcessorUtils.availableProcessors();
|
||||||
Assume.assumeTrue(cores > 1);
|
Assume.assumeTrue(cores > 1);
|
||||||
|
|
||||||
final int readers = cores / 2;
|
final int readers = cores / 2;
|
||||||
|
@ -66,7 +66,7 @@ public class QueueBenchmarkTest
|
||||||
@Test
|
@Test
|
||||||
public void testBlockingQueues() throws Exception
|
public void testBlockingQueues() throws Exception
|
||||||
{
|
{
|
||||||
int cores = Runtime.getRuntime().availableProcessors();
|
int cores = ProcessorUtils.availableProcessors();
|
||||||
Assume.assumeTrue(cores > 1);
|
Assume.assumeTrue(cores > 1);
|
||||||
|
|
||||||
final int readers = cores / 2;
|
final int readers = cores / 2;
|
||||||
|
|
|
@ -56,6 +56,7 @@ import org.eclipse.jetty.unixsocket.UnixSocketConnector;
|
||||||
import org.eclipse.jetty.unixsocket.client.HttpClientTransportOverUnixSockets;
|
import org.eclipse.jetty.unixsocket.client.HttpClientTransportOverUnixSockets;
|
||||||
import org.eclipse.jetty.util.IO;
|
import org.eclipse.jetty.util.IO;
|
||||||
import org.eclipse.jetty.util.LeakDetector;
|
import org.eclipse.jetty.util.LeakDetector;
|
||||||
|
import org.eclipse.jetty.util.ProcessorUtils;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
import org.eclipse.jetty.util.thread.Scheduler;
|
import org.eclipse.jetty.util.thread.Scheduler;
|
||||||
|
@ -86,7 +87,7 @@ public class HttpClientLoadTest extends AbstractTest
|
||||||
unixSocketConnector.setUnixSocket( sockFile.toString() );
|
unixSocketConnector.setUnixSocket( sockFile.toString() );
|
||||||
return unixSocketConnector;
|
return unixSocketConnector;
|
||||||
}
|
}
|
||||||
int cores = Runtime.getRuntime().availableProcessors();
|
int cores = ProcessorUtils.availableProcessors();
|
||||||
ByteBufferPool byteBufferPool = new ArrayByteBufferPool();
|
ByteBufferPool byteBufferPool = new ArrayByteBufferPool();
|
||||||
byteBufferPool = new LeakTrackingByteBufferPool(byteBufferPool);
|
byteBufferPool = new LeakTrackingByteBufferPool(byteBufferPool);
|
||||||
return new ServerConnector(server, null, null, byteBufferPool,
|
return new ServerConnector(server, null, null, byteBufferPool,
|
||||||
|
|
Loading…
Reference in New Issue