zomaz
Messages postés1Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention16 septembre 2004
-
16 sept. 2004 à 11:13
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 2011
-
18 sept. 2004 à 09:21
Bonjour à tous,
J'ai un petit souci avec l'ulitisation de threads multiples :
je dois réaliser un programme qui simule un envoi de requetes sur un serveur. Il existe plusieurs types de requetes, chacune d'entre elles devant etre envoyées à une certaine fréquence.
Voici comment j'ai construit mon programme :
public class Injecteur
{
public static void main (String [] args)
{
...
try
{
// lancement des threads
for (int i = 0; i < nb_services; i++)
{
ts[i] = new tService (session, ...)
ts[i].start();
}
Thread.currentThread().yield();
}
catch (SessionException e)
{
System.err.println(e);
}
}
}
class tService extends Thread
{
....
public tService (...)
{
... //recuperation des variables
}
public void run ()
{
tRequete[] tr = new tRequete[nb_requetes];
try
{
while (i<nb_requetes)
{
public tRequete (...)
{
//recuperation des variables
}
public void run()
{
try
{
//envoi de la requete
}
catch (Exception e)
{
e.printStackTrace();
System.err.println(e);
}
}
}
En gros je crée autant d'objets tService que de services à injecter, et un objet tRequete représente une requete pour un service. La frequence d'envoi des requetes est représentée par la variable my_sleep (j'ai pas détaillé le calcul de cette valeur)
Le programme fonctionne correctement pendant une dizaine de minutes avant de partir en erreur (java.lang.outofmemory). Si je regarde la charge CPU sur mon PC, elle à fond lorsqu'on a le message d'erreur. Je pense que je ne dois pas correctement libérer les threads une fois terminées.
Ou peut-etre que l'architecture de mon appli n'est la bonne pour ce type d'application.
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 18 sept. 2004 à 09:21
Salut,
ton prog consomme toute la mémoire disponible pour Java. C'est pas si grave il suffit d'augmenter la taille maximale avec l'option -Xmx. Par exemple java -Xmx300M -jar mon.jar indique une taille maximale de 300 Mo.
Après il faut faire atentin aux nombres de services et de requêtes par services que tu crées. Si tu as 100 services et 500 requêtes ça peut faire beaucoup.