2011-12-20 3 views
1

J'ai développé une application serveur client java basée sur la programmation socket. Je suis en train de tester plusieurs clients qui contactent le serveur simultanément. Sur mon serveur, j'exécute eclipse, chrome, mysqld, memcached, l'admin mysql, la requête mysql, mon serveur java, et les clients simultanés sur 5. La charge utile de la requête et de la réponse ne dépasse pas .5kb (au maximum). Environ 5 requêtes par client séquentiellement. Quand je cours 1 client, les choses vont bien, si je cours 5 simultanément mon serveur ne semble pas répondre.Java Client Server Programmation, cpu maxing out

Maintenant, ma question est. J'ai un peu 32 de vanilla unbuntu installé. Va peaufiner l'aide réseau? Ou pensez-vous que c'est probablement un problème avec mon application elle-même. Je cours un processeur dual core avec 4 Go de RAM, Ubuntu 32 bits.

Je cherche de bons blogs/liens à lire.

Modifier Lors d'une enquête plus approfondie, j'ai réalisé que mon serveur ne recevait pas de demandes. Mais mon client l'envoie. De toute façon pour vérifier si le serveur a reçu la demande, et a décidé de laisser tomber.

Répondre

1

La nature du problème semble être une mauvaise gestion des accès concurrents sur le serveur. Êtes-vous sûr qu'il y a un verrouillage correct des objets sur le serveur? N'y a-t-il pas d'impasses? Est-ce que votre code est threadsafe?

5 demandes en même temps n'est rien - il suffit d'ouvrir 5 onglets dans Chrome et vous verrez.

+0

Oui, c'est ce que je pensais. J'ai fait un sniff de wireshark, et j'ai remarqué que ma requête atteignait le serveur. Il y a des Ack. Mais pour une raison quelconque, le socket/instream du côté serveur ne prend pas l'objet request. Oui, son threadsafe. J'ai le verrouillage aux bons endroits. J'ai d'autres demandes/réponses qui vont bien. Juste celui-ci demande que le serversocket.instream ne prenne pas. Tous les conseils/pensées vous aideront .. s'il vous plaît gardez le. Merci. – Siddharth

+0

Juste celle-ci ne passe pas systématiquement. La même demande passe 50% du temps. – Siddharth

+0

Pourquoi ne pas essayer de télécharger un exemple de code Java serveur/client et tester si cela fonctionne. puis ajoutez fonctionnalité par fonctionnalité pendant le test jusqu'à ce qu'il cesse de fonctionner. –