J'ai un scénario de téléchargement de fichiers dans mon projet. Lorsque j'essaie de télécharger les gros fichiers, cela me donne une erreur OutOfMemory. Cette erreur est liée à la taille du segment de mémoire Java.
Comment augmenter la taille du tas en Java et quel fichier dois-je modifier pour cela? J'utilise le serveur jboss 5.1 pour exécuter mon application.
Vous pouvez le définir en tant qu'arguments JVM de la manière habituelle, par exemple. -Xms1024m -Xmx2048m
pour un minimum de 1 Go et un maximum de 2 Go. JBoss utilisera la variable d'environnement Java_OPTS
pour inclure des arguments JVM supplémentaires. Vous pouvez le spécifier dans le fichier /bin/run.conf.bat
:
set "Java_OPTS=%Java_OPTS% -Xms1024m -Xmx2048m"
Cependant, il s’agit plus d’un solution de contournement que d’une solution réelle. Si plusieurs utilisateurs téléchargent simultanément de gros fichiers, vous rencontrerez tôt ou tard le même problème. Vous auriez besoin de continuer à augmenter la mémoire pour rien. Vous devriez plutôt configurer votre analyseur de téléchargement de fichier pour qu'il stocke le fichier téléchargé sur un disque temporaire plutôt que entièrement en mémoire. Tant qu'on ne sait pas quel analyseur utiliser, aucune réponse appropriée ne peut être donnée. Cependant, plus souvent qu'Apache Commons FileUpload est utilisé sous les couvertures, vous devez alors lire la documentation avec "taille de seuil" comme mot clé pour configurer la limite de mémoire des fichiers téléchargés. Lorsque la taille du fichier dépasse le seuil, il est alors écrit sur le disque.
Sur wildfly 8 et versions ultérieures, accédez à /bin/standalone.conf
et mettez-y votre Java_OPTS, avec tout ce dont vous avez besoin.
Utilisez les options de ligne de commande -Xms et -Xmx lors de l'exécution de Java:
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
Pour plus d'aide, tapez Java -X
en ligne de commande.
Modifiez l'entrée suivante dans le fichier run.conf. Mais si vous avez plusieurs machines virtuelles s'exécutant sur le même ordinateur, vous pouvez l'exécuter via un argument de ligne de commande de -Xms2g -Xmx4g (ou quels que soient vos paramètres de mémoire de départ/maximum préférés.
if [ "x$Java_OPTS" = "x" ]; then
Java_OPTS="-Xms2g -Xmx4g -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true
Recherchez dans le dossier bin JBoss le fichier run.bat (run.sh sous Unix).
cherchez la ligne set Java_OPTS
(ou simplement Java_OPTS sous Unix) à la fin de cette ligne, ajoutez -Xmx512m. Modifiez le nombre en fonction de la quantité de mémoire que vous souhaitez attribuer à JBoss.
Si vous utilisez un script personnalisé pour démarrer votre instance jboss, vous pouvez également ajouter l'option set Java_OPTS.
J'ai mentionné les modifications de configuration nécessaires pour les environnements augmentation de la taille du segment de mémoire dans Windows ou Linux.
Linux:
bin/standalone.conf
Vérifiez la ligne suivante,
Java_OPTS
et changez-le en fonction de vos besoins en taille de segment} _
-Xms1303m: initial heap size in megabytes
-Xmx1303m: maximum heap size in megabytes
Java_OPTS="-Xms1024M -Xmx2048M -XX:MaxPermSize=2048M -XX:MaxHeapSize=2048M"
Les fenêtres:
bin/standalone.conf.bat
Java_OPTS="-Xms1024M -Xmx2048M -XX:MaxPermSize=2048M -XX:MaxHeapSize=2048M"
Maintenant, redémarrer le serveur et il fonctionnera sans afficher d'erreur de taille de segment de mémoire.
Pour plus d'informations, vous pouvez consulter ce lien ci-dessous.
Que changer?
set "Java_OPTS =% Java_OPTS% -Xms1024m -Xmx2048m"
Où changer? (Normalement)
bin/standalone.conf (Linux) standalone.conf.bat (Windows)
Que faire si vous utilisez un script personnalisé qui remplace les paramètres existants? puis?
setJBosssEnvironment.cmd/.sh (le type de nom de fichier sera présent)
De plus amples informations sont déjà fournies par certains membres de notre comité! BalusC .
Dans mon cas, pour jboss 6.3
je devais changer Java_OPTS
dans le fichier jboss-eap-6.3\bin\standalone.conf.bat
et définir les valeurs suivantes -Xmx8g -Xms8g -Xmn3080m
pour que jvm prenne 8 Go d'espace.