2010-01-27 8 views
2

Je finalise le test d'une application multi-thread qui semble fonctionner correctement jusqu'à ce que je la mette sous forte charge, puis que j'insiste sur la machine en cours d'exécution. Ensuite, je commence à voir certains des cas-limites étrangers que je ne prévoyais pas produire des conditions inattendues/imprévues. La façon dont j'insiste sur la machine est en faisant un vide sur une très grande base de données sqlite. Est-ce que quelqu'un a d'autres bonnes façons d'induire ce type de scénario de charge lourde?Quels sont les bons moyens d'induire des problèmes de threads?

Répondre

1

De quel type de stress parlez-vous? Mémoire, CPU, pool de threads complet ou E/S de fichier? Je voudrais écrire une application simple qui a un thread qui consomme de la mémoire, un thread qui consomme des cycles CPU, un thread qui lie le pool de threads, et un thread qui thrashes le disque. Accrocher une interface utilisateur pour contrôler l'appétit de chaque thread et ajuster les «boutons» pour klaxonner avec votre application.

+0

Merci pour l'idée. Je pense que je vais tirer le meilleur parti de faire quelque chose comme ça. –

2

Vous pouvez utiliser CHESS.

+0

Sa licence lui interdit d'être utilisé dans mon environnement. –

1

Les problèmes de filetage dus à un mauvais verrouillage tendent à se révéler sous une charge importante car le minutage change. Ce n'est pas réellement la charge lourde qui produit le problème, c'est la synchronisation changée due aux retards aléatoires d'ordonnancement. Vous pouvez reprogrammer les problèmes sans lourdes charges en introduisant des retards aléatoires dans l'exécution du thread. C'est l'approche qu'utilise Chess.

Questions connexes