Kashi66 2 Zgłoś post Napisano Styczeń 2, 2016 Witam! Mam problem z pamięcią ram na moim VPSie a mianowicie mam ustawione maksymalnie 64mb ktore ma być przydzielone do programu ale z niewiadomych przyczyn ten ogranicznik nie działa. Niby w webminie pokazuje na głównej: http://scr.hu/2itp/lerd5 ale już w procesach: http://scr.hu/2itp/h5f6n Na panelu w hosteam tez pokazuje inna wartość niz ta na głównej w webminie: http://scr.hu/2itp/mgben Da rade jakoś ustawić ten limit na 64mb bo boje sie ze jak wysypie sie java to mi zablokują vpsa. Udostępnij ten post Link to postu Udostępnij na innych stronach
Miłosz 2311 Zgłoś post Napisano Styczeń 2, 2016 Z jakimi parametrami odpalasz proces? Udostępnij ten post Link to postu Udostępnij na innych stronach
Kashi66 2 Zgłoś post Napisano Styczeń 2, 2016 (edytowany) Odpalam go w screenie z screen -dmS bot java -Xmx64M -jar JTS3ServerMod.jar Mało sie na javie znam, na internecie wyczytałem ze -Xmx ogranicza ram przydzielany javie ale to nie działa u mnie. Dodam jeszcze ze mam Jave 7 JDK Edytowano Styczeń 2, 2016 przez Kashi66 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Bartosz Z 236 Zgłoś post Napisano Styczeń 2, 2016 Zaktualizuj sobie Javę do najnowszej wersji i nie przejmuj się blokadą serwera - możesz wykorzystać tyle pamięci ile kupiłeś Udostępnij ten post Link to postu Udostępnij na innych stronach
Miłosz 2311 Zgłoś post Napisano Styczeń 2, 2016 Nie ogranicza. Raczej powinieneś użyć MaxPermSize Zaktualizuj sobie Javę do najnowszej wersji i nie przejmuj się blokadą serwera - możesz wykorzystać tyle pamięci ile kupiłeś I co to ma dać? Pytanie jest o limitowanie wykorzystania pamięci, a nie wykorzystywanie całej dostępnej. 1 Udostępnij ten post Link to postu Udostępnij na innych stronach
Desavil 88 Zgłoś post Napisano Styczeń 2, 2016 -Xmx limituje tylko wartość stosu (heap size). Nie ograniczysz w ten sposób wykorzystania pamięci dla Javy, ogólnie może to być bardzo trudne w ten sposób. Udostępnij ten post Link to postu Udostępnij na innych stronach
Kashi66 2 Zgłoś post Napisano Styczeń 2, 2016 (edytowany) Nie ogranicza. Raczej powinieneś użyć MaxPermSize Użyłem screen -dmS bot java -Xmx64m -XX:MaxPermSize=64m -jar JTS3ServerMod.jar I nadal nie chce ograniczyć pamieci: http://scr.hu/2itp/0tyqv http://scr.hu/2itp/cs1oe -Xmx limituje tylko wartość stosu (heap size). Nie ograniczysz w ten sposób wykorzystania pamięci dla Javy, ogólnie może to być bardzo trudne w ten sposób. A da rade zrobić coś by po wysypaniu programu nie zasypało mi całej pamieci? Edytowano Styczeń 2, 2016 przez Kashi66 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Desavil 88 Zgłoś post Napisano Styczeń 2, 2016 W samej komendzie Java tego nie ograniczysz, nie ma takiej opcji. Możesz coś pokombinować z ulimit oraz /etc/security/limits.conf 1 Udostępnij ten post Link to postu Udostępnij na innych stronach
Kashi66 2 Zgłoś post Napisano Styczeń 2, 2016 (edytowany) W samej komendzie Java tego nie ograniczysz, nie ma takiej opcji. Możesz coś pokombinować z ulimit oraz /etc/security/limits.conf Ustawiłem ulimit -v 131072 oraz -m 131072 czyli na 128mb, polecenie startowe ma -Xmx64m wiec nie powinno być problemu z pamięcią ale java sypie błędami: Error occurred during initializtion of VM Could not reserve enough space for object heap Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. @edit Teraz pytanie mam trochę techniczne a mianowicie według webmina po uruchomieniu skryptu mam wolne fizycznie ~400mb ramu a cos koło 300mb jest w cache. Na panelu hosteam pokazuje mi niby zajętość ramu ~85% a fizycznie przecież używam tylko 100mb wiec o co chodzi? @edit2 Na tiktalik.com pozwalają na skrypty w javie? 8zł za miesiąc nie jest dużo a 1gb ramu wystarczająco jak dla mnie. Edytowano Styczeń 2, 2016 przez Kashi66 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Pan Kot 1535 Zgłoś post Napisano Styczeń 2, 2016 (edytowany) Java alokuje pamięć dynamicznie, podobnie jak i C#, a to co ty jako użytkownik możesz kontrolować to tylko i wyłącznie to jak agresywny ma być GC (i maszyna wirtualna/framework), i też wyłącznie do pewnego stopnia. Poeksperymentuj sobie z takimi ustawieniami jak MinHeapFreeRatio, MaxHeapFreeRatio, MaxPermSize. -Xmx kontroluje tylko wielkość heapu. Jak chcesz się bawić pamięcią to zrozum jak dokładnie ona działa. Zarówno java jak i C# kierują się zasadą szybkiej alokacji, wolnego zwalniania. Mam tu na myśli to, że alokuje się X pamięci, gdzie ten X to będzie maksymalny usage (tzw. peak) podczas działania aplikacji, a następnie nawet jeśli GC wyczyści to co nie jest już używane, to ta wyczyszczona pamięć nie trafia z powrotem do OSu (od razu), tylko zostaje jako zaalokowana do procesu, tak żeby nie było trzeba ponownie prosić OSu o zaalokowanie pamięci. Jest to spowodowane tym, że alokacja pamięci po stronie OSu jest kosztowna, a aplikacja jest w stanie działać szybciej gdy GC zarządza pamięcią i nie musi się prosić o alokowanie/dealokowanie pamięci przez OS. Dopiero gdy po dłuższym używaniu maszyna wirtualna/GC zauważy, że w zasadzie to była sytuacja jednorazowa i nie musimy tej pamięci tyle trzymać, może zdecydować o oddaniu jej z powrotem do OSu. To w którym momencie oddać OSowi pamięć zależy właśnie od tego jak agresywny jest GC, a tym zarządzają ustawienia FreeRatio które Ci podlinkowałem wyżej. Nie ograniczaj javie pamięci, bo to nie ma sensu. Poinstruuj ją zamiast tego, żeby zwracała to, co jej nie potrzebne tak szybko jak to możliwe. Ograniczanie pamięci jedyne co spowoduje to właśnie errory typu out of memory, bo nie jesteś w stanie kontrolować peaku. Mam sam od groma aplikacji napisanych w C# odpalanych przez mono i jest to bardzo powszechne zjawisko, że aplikacja zaraz po odpaleniu potrafi używać 7% pamięci, a po godzinie-dwóch spaść do 4.5%, cały czas działając i wykonując te same zadania. Edytowano Styczeń 2, 2016 przez Gość (zobacz historię edycji) 3 Udostępnij ten post Link to postu Udostępnij na innych stronach
Kashi66 2 Zgłoś post Napisano Styczeń 3, 2016 (edytowany) Dziękuję za bardzo dobre wyjaśnienie! Temat można już zamknąć. Dowiedziałem sie tego co chciałem i bardzo dziękuje @Archi, @Miłosz oraz @Desavil za pomoc! Moje konto jest za nowe by mogłem dawać plusy wiec proszę o plusy dla Panów wyżej jeśli można. Edytowano Styczeń 3, 2016 przez Kashi66 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach