Jak kontrolować użycie pamięci RAM / swap

18

Czy istnieje sposób (aplikacja) do kontrolowania zasad użycia pamięci RAM / swap na poziomie aplikacji.

Mam kilka aplikacji, z których cały czas korzystam i chcę, aby pozostały w pamięci RAM przez cały czas. Są też aplikacje, z których rzadko korzystam i mogą być wyrzucane w celu zamiany na żądanie. Wiem, że domyślnie skonfigurowane okna powinny dać mi najlepszą wydajność, ale chcę sprawdzić, czy mogę uzyskać więcej :).

Korzystam z systemu Windows 7.

Darqer
źródło
2
+1. Interesuje mnie metoda, która działa na XP.
Xavierjazz

Odpowiedzi:

9

Tak, istnieje: niech program wywoła funkcję VirtualLock :

Strony zablokowane przez proces pozostają w pamięci fizycznej, dopóki proces je nie odblokuje lub nie zakończy. Te strony z pewnością nie zostaną zapisane w pliku stronicowania, gdy są zablokowane.

Uważam, że funkcja SetProcessWorkingSetSize może być również pomocna.


Dla tych, którzy myślą, że jestem heretykiem, nawet sugerując, że może to być przydatne:

Zauważ, że mogą istnieć ważne powody blokowania stron w pamięci. Prawidłowym powodem może być to, że użytkownik uruchamia nagrywarkę CD, a nagrywarka CD ciągle wysuwa strony, a zatem powoduje niedopełnienie bufora, tworząc kolejkę. W takiej sytuacji dobrze byłoby zablokować bufory pamięci, aby nie były one stronicowane, nawet jeśli oznacza to, że reszta komputera zwalnia do indeksowania, ponieważ to nadal jest lepsze niż dawanie użytkownikowi kolejki. Mogą być też inne ważne powody - mam na myśli to, że chociaż zwykle nie zaleca się blokowania stron w pamięci, nadal istnieją prawidłowe sytuacje i nie sądzę, że zabicie pomysłu pomogłoby tutaj OP.


Aktualizacja: Spójrz na Process Hacker „s Reduce Working Setopcji menu.

Mehrdad
źródło
Być może zacytowanie tego fragmentu z artykułu umieściłoby go w kontekście: „Blokowanie stron w pamięci może obniżyć wydajność systemu, zmniejszając dostępną pamięć RAM i zmuszając system do zamiany innych krytycznych stron na plik stronicowania. Każda wersja systemu Windows ma limit maksymalnej liczby stron, które proces może zablokować. Limit ten jest celowo niewielki, aby uniknąć poważnego pogorszenia wydajności. ” (Moje podkreślenie)
1
@Randolph: Nigdy nie zaleca się go, po prostu wspomnieć, że w przeciwieństwie do tego, co większość ludzi wydaje się, że jest to możliwe . Ja osobiście nienawidzę mówić PO „Zabijmy twój pomysł” - myślę, że PO zrozumiał, że fakt, że nie powinien tego robić, ale jeśli nadal chce, myślę, że ma prawo wiedzieć, jak to zrobić. (Istnieje powód, dla którego stworzyli te funkcje, i nie jestem osobą, która ocenia, czy OP powinien ich używać, czy nie.)
Mehrdad
W systemie Windows jest dużo kodu, który został pozostawiony dla kompatybilności wstecznej. Jeśli istnieje ku temu powód, to by było na tyle. Można to porównać do funkcji zmniejszania w SQL Server, która nie powinna być używana w żadnych okolicznościach, ale pozostawiono ją ze względu na kompatybilność. Windows 7 to nowoczesny system operacyjny z odpowiednim zarządzaniem pamięcią, a pliku stronicowania nie należy usuwać, a programy nie powinny próbować pozostać w pamięci poza „regułami”. Jest to bardzo zła praktyka i może prowadzić do niestabilności i / lub bezużytecznego systemu.
1
@Randolph: (Widzę, że porzuciłeś analogię.:]) Stwórz mały program (nie powinien być więcej niż ~ 10 linii), aby otworzyć inny proces i wywołać SetProcessWorkingSetSize. To jeden sposób. Jeśli oczywiście nie wiesz, co to znaczy, ponieważ nie jesteś programistą, to oczywiście niewiele możesz zrobić. Ale nadal jest to możliwe, a powiedzenie, że jest to niemożliwe, jest nadal niepoprawne, wymaga jedynie większej wiedzy niż PO.
Mehrdad
1
@Randolph, możesz pobrać różne darmowe aplikacje, które zmuszają uruchomione aplikacje do przejścia do pliku stronicowania (wywołując SetProcessWorkingSetSize w każdym procesie).
Chris O
5

Jedynym sposobem, jaki znalazłem, jest wyłączenie pliku strony. Jednak nie jest to idealne rozwiązanie: pojawi się komunikat o błędzie, jeśli zbliżysz się do limitu pamięci RAM lub go przekroczysz, i może nie zapisać poprawnie zrzutów awaryjnych, więc włącz go ponownie, jeśli chcesz rozwiązać problem. Poza tym od miesięcy korzystam z Win7 bez pliku stronicowania.

Moje doświadczenie: miałem ten problem z oprogramowaniem fortepianowym (użycie 1 GB pamięci RAM), które zamieniło się w swap po dłuższym okresie nieużywania. Kilka godzin później gra na klawiszach fortepianu doprowadziłaby do chaotycznego bałaganu, ponieważ zamiana nie zostałaby przeładowana wystarczająco szybko, aby odtworzyć dźwięk. (Następnie położyłbym całą rękę na każdym kluczu, aby wymusić przeładowanie!)

Jeśli masz problem z pamięcią RAM, sugeruję, abyś kupił więcej (np. Od 8 do 12 GB w systemie Windows 7 x64). Dla osób świadomych pamięci RAM posiadanie dużej ilości pamięci RAM jest darem niebios.

Ale wcześniej powinieneś rozważyć zakup dysku SSD i umieszczenie go na nim. Znacznie przyspieszy odzyskiwanie wymiany, a także zapewni wiele innych korzyści systemowych. Pamięć RAM nie zapewnia korzyści, gdy nie jest używana.

mtone
źródło
3
Robić. Nie. Usunąć. The. Strona. Plik. Zawsze.
7
Mam. Być. Za pomocą. Win7. Z. Nie. Plik strony. Dla. Miesięcy. Bez. A. Zaczep.
mtone
1
Cały czas używam również Win7 bez pliku strony, jednak wydaje mi się, że może to nie wystarczyć do mojej bieżącej pracy :(
Darqer 25.01.11
3
@Randolph: MS wie, o czym mówią, ponieważ wie, że ich klienci nie zawsze są profesjonalistami komputerowymi. Ale dla tych ludzi, którzy faktycznie wiedzą dokładnie, co robi plik strony, a nie robi, nie ma powodu, aby zmuszać ich do praktyki, której nie potrzebują.
Mehrdad
2
@Randolph: Jeśli przekroczysz limit prędkości bez pasa bezpieczeństwa, możesz umrzeć, a także zabić innych ludzi, nie wspominając o zwiększeniu kosztów ubezpieczenia dla innych. Najgorsze, co może się zdarzyć, jeśli komputer zapisze pamięć, polega na tym, że stracisz trochę czasu, w zależności od sytuacji. Nie widzisz czegoś trochę (czytaj: dużo) złego w analogii tutaj? Używałeś także Linux / Unix? Zauważyłeś kiedyś, że dają ci więcej niż wystarczającą ilość liny do zawieszenia się, w przeciwieństwie do systemu Windows? Ludzie nadal z nich korzystają - czy to jest jak jazda pod wpływem czy coś takiego?
Mehrdad
2

Wykorzystanie pliku strony zależy od wielu czynników. Jeśli korzystasz z wielu programów i nie masz wystarczającej ilości pamięci RAM dla wszystkich z nich jednocześnie, to niektóre z nich (lub wszystkie) mogą zostać zamienione na plik stronicowania.

Jeśli masz 4 GB pamięci RAM i powiedzmy, że około 3 GB jest dostępne, ponieważ karty wideo i inni użytkownicy zasobów blokują części 4 GB, a używasz tylko kilku programów, które nie zajmują dużo pamięci, teoretycznie nie powinien nigdy potrzebować pliku wymiany. Jednak Windows Vista i 7 są wyjątkowo agresywne w zamianie programów na dysk.

Kiedyś miałem ustawienie, które zmniejszało zamienność systemu Windows 7 (zamiana jest terminem linuksowym, ale dotyczy również systemu Windows, a ponieważ istnieje ustawienie rejestru pozwalające oswoić agresywność zamiany systemu Windows, wydaje się, że Microsoft zgadza się niechętnie, choć w studni ukryty sposób), ale nie mogę już tego znaleźć. Szukając tego, znalazłem się tutaj. Najlepszą alternatywą dla tego ustawienia, które znalazłem, jest upewnienie się, że używasz pliku wymiany o stałym rozmiarze (wybieram 4096-4096 w 32-bitowych systemach operacyjnych i 12 GB w 64-bitowych systemach, ponieważ mam 6 GB systemowej pamięci RAM) na dedykowanej partycji. Posiadając zapasowy dysk 200 GB o prędkości 7200 obr./min, umieszczam na nim wszystkie moje partycje wymiany (Windows XP, 7, 7 64-bit i różne Linuxy). Wydaje mi się, że to działa, ale YMMV.

Paweł
źródło
1

Warto wspomnieć: gdy system Windows wykryje, że często korzystasz z niektórych aplikacji, funkcja superszybkiego pobierania zapisuje te aplikacje w pamięci, aby szybciej się ładowały. Myślę, że zaufaj oknom, aby zrobić to tutaj.

CreeDorofl
źródło