Java-Xmx, память Max в системе

Вы можете попробовать это:

import pandas as pd    

column_names = ['x','y']
df = pd.read_csv('csv-file.csv',header=None)
df.columns = column_names
22
задан Amandeep Grewal 3 April 2011 в 05:51
поделиться

6 ответов

В зависимости от вашей ОС это может сработать для получения свободного и доступного размера памяти:

java.lang.management.OperatingSystemMXBean mxbean = java.lang.management.ManagementFactory.getOperatingSystemMXBean();
com.sun.management.OperatingSystemMXBean sunmxbean = (com.sun.management.OperatingSystemMXBean) mxbean;
long freeMemory = sunmxbean.getFreePhysicalMemorySize();
long availableMemory = sunmxbean.getTotalPhysicalMemorySize();

Оттуда вы можете вычислить 80-90% и запустить свой jar с максимальным размером памяти вы хотите.

Я не знаю, работает ли это со всеми ОС (например, Windows), но это работало, когда я тестировал его как с OSX, так и с Linux.

4
ответ дан 29 November 2019 в 05:38
поделиться

The limit for -XmX is -Xmx1500m on 32 bit windows. Shared libraries get in the way of a bigger heap. You'll need about 2Gb of RAM to do this.

On non-windows OSes you can go bigger, and 64Bit JVM's are capable of a LOT more.

Windows XP will not let you have more than 3Gb of RAM ( doesn't care if you have 4Gb physical, ever since XP SP3) Vista may be different YMMV.

I've tried -Xmx4000M on a 64 bit JVM on 64 bit Linux and it was fine. considering I had 6Gb of physical ram, it was not a big request.

Your 80% idea is interesting, but my test systems run higher percentages than that without ill effect. (As long as you don't try doing anything else.)

And the other commenter is right, paging out your JVM's in-memory image is not quick. Later JVM's are better at doing this less messily ( but they have better garbage collectors too)

If you can't reduce your memory consumption – and I know how hard that is – then have lots of physical ram and allocate most of it.

13
ответ дан 29 November 2019 в 05:38
поделиться

Что ж, я могу вам сказать одну вещь: не позволяйте вашему приложению приближаться к заполнению оперативной памяти. Приложения Java вообще не меняются изящно. Я думаю, что из-за сборки мусора java постоянно извлекает свою память из подкачки.

Я попал в тупик, когда я думаю, что система запрашивала память у java, что привело бы к сборке мусора и извлечению материала из файла подкачки - на этом этапе система просто вращалась, пока я ее не сбросил.

Это было с БОЛЬШОЙ оперативной памятью и БОЛЬШИМ пространством подкачки (на то время) и более старой виртуальной машиной Java, так что ваш пробег может варьироваться.

Также, в зависимости от как вы запускаете это другое приложение, вам может потребоваться указать -Xms для вашего приложения вместо другого. Если вы даете ему полную команду, дайте ему -Xms, но если вы просто вызываете основной класс в банке, то вашему приложению требуется -Xms. (Ой, вы указали, да, вам нужно передать его в команду "Java", которую вы вызываете. )

0
ответ дан 29 November 2019 в 05:38
поделиться

Если вы еще этого не сделали, вам нужно запустить вашу программу через профилировщик памяти. Вы можете обнаружить, что некоторые структуры данных не удаляются, даже если они больше не используются.

JProfiler довольно изящный, но вы можете получить ту же информацию с помощью HPROF, который был представлен в Java 5: http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

Помните также, что разные платформы имеют разные максимальные размеры кучи в зависимости от архитектуры (32-разрядная или 64-разрядная), ОС и даже JVM.

Если у вас есть много значений, которые можно использовать повторно (например, строки, которые вы читаете из XML-файла), вы можете значительно снизить требования к памяти, объединив свои объекты.

0
ответ дан 29 November 2019 в 05:38
поделиться

Есть ли причина, по которой вы используете ОС для выполнения программы в банке? Если вам не нужно, чтобы он выполнялся в отдельном процессе от вашего приложения, вы можете просто вызвать основной метод прямо из вашего кода и запустить приложение с любым параметром -Xmx, который вы хотите.

0
ответ дан 29 November 2019 в 05:38
поделиться

В следующем блоге есть полная запись в блоге о том, как устранять неполадки в Java-приложениях с помощью jconsole и других инструментов. Имейте в виду, что отсутствие контроля над использованием памяти, скорее всего, является утечкой памяти, но это может быть связано и с другими причинами. Прочтите сообщение, попробуйте воспроизвести этот сценарий и посмотрите, решило ли это вашу проблему.

http://www.kiragiannis.com/cloud-computing/debug-a-java-application-in-the- cloud /

0
ответ дан 29 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: