J'ai une application Web Java qui fonctionne beaucoup avec les conventions de fichiers.
J'utilise Tomcat 6 comme conteneur de servlet. Lorsque de nombreuses requêtes sont soumises, Tomcat devient très gourmand en mémoire. Je me demande comment je peux affiner tomcat pour réduire la consommation de mémoire. Je considère aussi changer mon conteneur de servlets.
Que suggérez-vous?Optimisation de la mémoire et de la consommation du processeur Tomcat
Répondre
Vous pouvez limiter les numéros de connexion acceptés/opérationnels dans la configuration conf/server.xml
.
Avez-
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="16" minSpareThreads="1"/>
et
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
ou
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads='16'/>
dans le fichier de configuration et cela devrait vous frein.
Edit: Sur la base de votre commentaire, vous pouvez déplacer le traitement dans la piscine de fil dédié de taille en fonction de votre nombre de CPU (Runtime.getRuntime().availableProcessors()
) (voir ExecutorService et Executors.) Vous pouvez ensuite appliquer une LinkedBlockingQueue limitée à étrangler le nombre d'attente tâches (n'oubliez pas de spécifier un RejectedExecutionHandler pour faire l'ajout de blocage lorsque la file d'attente est pleine).
Édition 2: Ajout de liens vers les classes. Là vous trouvez quelques échantillons.
Édition 3: Un exemple de méthode que j'ai utilisé dans un projet.
/**
* Creates a new thread pool based on some attributes
* @param poolSize the number of worker threads in the thread pool
* @param poolName the name of the thread pool (for debugging purposes)
* @param priority the base priority of the worker threads
* @param capacity the size of the task queue used
* @return the ExecutorService object
*/
private ExecutorService newPool(int poolSize,
String poolName, final int priority, int capacity) {
int cpu = Runtime.getRuntime().availableProcessors();
ExecutorService result = null;
if (poolSize != 0) {
if (poolSize == -1) {
poolSize = cpu;
}
if (capacity <= 0) {
capacity = Integer.MAX_VALUE;
}
result = new ThreadPoolExecutor(poolSize, poolSize,
120, TimeUnit.MINUTES,
new LinkedBlockingQueue<Runnable>(capacity),
new ThreadFactory() {
@Override
public Thread newThread(Runnable runnable) {
Thread t = new Thread(runnable);
t.setPriority(priority);
return t;
}
}, new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r,
ThreadPoolExecutor executor) {
if (!executor.isShutdown()) {
try {
executor.getQueue().put(r);
} catch (InterruptedException ex) {
// give up
}
}
}
});
}
return result;
}
Et vous pouvez l'utiliser de cette façon:
ExecutorService exec = newPool(-1, "converter pool", Thread.NORM_PRIORITY, 500);
servletContext.setAttribute("converter pool", exec);
Et dans votre servlet
ExecutorService exec = (ExecutorService)servletContext
.getAttribute("converter pool");
exec.submit(new Runnable() {
public void run() {
// your code for transformation goes here
}
}
- 1. Suivi de la mémoire des threads et de la consommation du processeur
- 2. Liste tous les processus et leur mémoire actuelle et la consommation du processeur?
- 3. Consommation et performances de la mémoire ObjectContext
- 4. Réduire la consommation de la mémoire DirectShow
- 5. La consommation de mémoire SQL Server 2k5?
- 6. Méthode multiplate-forme pour l'utilisation du processeur/de la mémoire
- 7. Utilisation de la mémoire VS. Utilisation du processeur dans l'iphone
- 8. AS3: Optimisation de la taille de la mémoire de l'objet
- 9. Consommation de mémoire de EF
- 10. Tomcat ThreadWithAttributes causant la fuite de mémoire
- 11. Limiter la consommation de mémoire de tsvncache.exe dans TortiseSVN?
- 12. Surveillance de la consommation de mémoire par différents objets Java
- 13. PHP cli Optimisation de l'utilisation de la mémoire
- 14. Mesure du temps d'exécution et de la mémoire utilisée
- 15. Optimisation de la création de l'environnement Jinja2
- 16. Performance du programme Java (temps de fonctionnement et consommation de mémoire)
- 17. Optimisation de la boucle jQuery
- 18. Utilisation de la mémoire Windows et du fichier de pages
- 19. Utilisation du processeur de la DLL de service?
- 20. Comment obtenir l'utilisation actuelle du processeur et de la RAM dans VB 6?
- 21. consommation de mémoire de niveau de thread de processus
- 22. Obtenir l'utilisation actuelle du processeur, de la RAM et du lecteur de disque en C#
- 23. générer la charge du processeur en Java
- 24. Comment vérifier la fuite de mémoire?
- 25. Envoi de la longueur du tampon et de la mémoire tampon sur la socket dans c
- 26. Gestion de la mémoire DOM et de la CPU
- 27. La consommation domestique de services Web
- 28. Détecter la vitesse du processeur/mémoire/vitesse Internet en utilisant Java?
- 29. Gestion de la mémoire lors du chargement d'énormes fichiers XML
- 30. Comet, responseText et utilisation de la mémoire
Que voulez-vous dire par "travailler beaucoup avec les conventions de fichiers"? –