2013-01-18 4 views
-1

possible en double:
How to set the maximum memory usage for JVM?problèmes de mémoire Linux .. avec programme java

Je suis en cours d'exécution d'un programme java, mais lorsque l'utilisation de la mémoire atteint 26,1%, il n'augmente pas plus et le programme devient très lent.

Quel pourrait être le problème? Est-ce que java a une limite d'utilisation de la mémoire? ou y a-t-il une limite de mémoire par application sur Linux?

java version "1.7.0_11" Java (TM) SE Runtime Environment (build 1.7.0_11-b21) Java HotSpot (TM) 64 bits serveur VM (build-B04 23.6, mode mixte)


Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie 
Cpu(s): 97.5%us, 0.4%sy, 0.0%ni, 2.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 33018800k total, 9522548k used, 23496252k free, 12100k buffers 
Swap: 32764528k total,  0k used, 32764528k free, 391812k cached 
    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
3463 wonn24 20 0 8769m 8.2g 9.8m S 391.3 26.1 257:09.24 java 
3725 hong8e 20 0 14876 1148 872 R 0.3 0.0 0:01.81 top 
    1 root  20 0 4088 972 720 S 0.0 0.0 0:00.71 init 
    2 root  15 -5  0 0 0 S 0.0 0.0 0:00.00 kthreadd 
    3 root  RT -5  0 0 0 S 0.0 0.0 0:00.17 migration/0 
    4 root  15 -5  0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 
    5 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 watchdog/0 
    6 root  RT -5  0 0 0 S 0.0 0.0 0:00.15 migration/1 
    7 root  15 -5  0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 
+0

coller le code here..or essayer profilage java à ur fin – Rajesh

Répondre

3

Par défaut, la version serveur de Java a une taille de segment de mémoire maximale de 1/4 de la mémoire principale. Avec un peu de surcharge des bibliothèques et des piles de threads, cela pourrait facilement représenter 26 ou 27% de la mémoire principale. Lorsque votre JVM commence à se remplir, il prend plus bas pour effectuer un GC, et la mémoire libre plus faible signifie qu'il se produit aussi plus souvent (si vraiment mauvais) Idéalement, votre utilisation réelle pourrait aussi faible que 40% de votre maximum Taille. Dans votre cas, votre utilisation réelle pourrait être d'au moins 7 Go.

Je vous suggère d'essayer d'augmenter votre taille de tas maximale à au moins 16 Go, éventuellement 24 Go si vous pouvez économiser la mémoire. à-dire -Xmx16g ou -Xmx24g

+0

La [page officielle sur java] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html) ne documente pas le Option "mx". –

+0

@MarkoTopolnik Mais cela dit que les options '-X' sont" non standard ". L'option '-mx' est conservée depuis Java 1.1 où il s'agissait d'une option documentée. Il a été abandonné théoriquement de sorte que l'option pourrait être non standard, et pourtant l'option «non standand» '-Xmx' est la norme et l'option« standard »' -mx' n'est pas standard. : P –

+0

En fin de compte, j'utilise l'option la plus simple comme '-mx' comme' -ms' est supporté dans Java 8 et ne disparaîtra pas bientôt. –

1

par défaut, Java a une limite de taille de tas de 64Mo (si les serveurs de mémoire ...) vous pouvez l'augmenter avec des arguments de ligne de commande, mais avant de le faire, assurez-vous que vous avez besoin de la mémoire supplémentaire et n » J'ai une fuite.

+0

Il est vrai que la mémoire maximale de Windows 32 bits par défaut à 64 Mo, il utilise déjà 8 Go sur UNIX il doesn ne s'applique pas ici. Jamais le moins votre solution est appropriée donc +1 –

Questions connexes