Co może sprawić, że Linux nie będzie reagował przez kilka minut podczas przeglądania niektórych stron internetowych?

28

Używam Linuksa 4.15 i zdarza mi się to wiele razy, gdy przeglądam Google, Facebook lub inną stronę wymagającą dużych zasobów - cały system operacyjny przestaje reagować, jest zawieszony i bezużyteczny. Jedyne, co widzę, że to działa, to dysk (główna partycja systemowa sformatowana jako ext4), który jest masowo używany (ograniczanie We / Wy).

Muszę poczekać minutę lub dłużej, aby pozbyć się wzdęcia, czasami nie reaguje przez dwanaście minut, a więc jestem sfrustrowany. Fakt, że system operacyjny nie jest w stanie dobrze poradzić sobie z wielozadaniowością, zwykle odzwierciedla absolutnie dziwne i niedopuszczalne zachowanie.

Dzieje się tak nie tylko z Firefoksem, ale z dowolną aplikacją interpretera javascript, w tym Microsoft VSCode lub angular -cli ( ng servepolecenie), a także z każdym innym wymagającym zasobów wątkiem wykonania - takim jak przypadek plantuml podczas generowania bardzo dużego wykresu z bardzo złożony diagram UML.

Obecnie system operacyjny staje się całkowicie niemożliwy do zarządzania, po uruchomieniu oprogramowania do odzyskiwania danych dla zewnętrznego dysku twardego (na partycji ext4), który został ostatnio odłączony od złego portu USB przez mały ruch.

Nie jestem w stanie wskazać przyczyny takiego błędnego zachowania

Mam wiele otwartych kart w przeglądarce i użycie 94% partycji systemu operacyjnego według dfdanych wyjściowych:

Filesystem     1K-blocks      Used Available Use% Mounted on
udev             3964160         0   3964160   0% /dev
tmpfs             798164      3192    794972   1% /run
/dev/sda5      173466400 153224316  11407424  94% /
tmpfs            3990820     62936   3927884   2% /dev/shm
tmpfs               5120         4      5116   1% /run/lock
tmpfs            3990820         0   3990820   0% /sys/fs/cgroup
/dev/loop5           128       128         0 100% /snap/anbox-installer/24
/dev/loop2           128       128         0 100% /snap/anbox-installer/17
/dev/loop4        223616    223616         0 100% /snap/kde-frameworks-5/26
/dev/loop3         90624     90624         0 100% /snap/core/7169
/dev/loop7        223616    223616         0 100% /snap/kde-frameworks-5/25
/dev/loop8         90624     90624         0 100% /snap/core/7270
/dev/loop0         87552     87552         0 100% /snap/qownnotes/2160
/dev/loop1        241664    241664         0 100% /snap/kde-frameworks-5/27
tmpfs             798164         0    798164   0% /run/user/0
tmpfs             798164        32    798132   1% /run/user/1000
/dev/loop9         87552     87552         0 100% /snap/qownnotes/2176
/dev/sda3      188669948 187132488   1537460 100% /media/kais/DATA
/dev/sdb1       15142960   2091904  13051056  14% /media/kais/STORE N GO

Jako sprzętu używam:

  1. Intel Core i3 v2348M zgodnie z lscpu:

    Architecture:        x86_64
    CPU op-mode(s):      32-bit, 64-bit
    Byte Order:          Little Endian
    Address sizes:       36 bits physical, 48 bits virtual
    CPU(s):              4
    On-line CPU(s) list: 0-3
    Thread(s) per core:  2
    Core(s) per socket:  2
    Socket(s):           1
    NUMA node(s):        1
    Vendor ID:           GenuineIntel
    CPU family:          6
    Model:               42
    Model name:          Intel(R) Core(TM) i3-2348M CPU @ 2.30GHz
    Stepping:            7
    CPU MHz:             905.312
    CPU max MHz:         2300.0000
    CPU min MHz:         800.0000
    BogoMIPS:            4589.49
    Virtualization:      VT-x
    L1d cache:           32K
    L1i cache:           32K
    L2 cache:            256K
    L3 cache:            3072K
    NUMA node0 CPU(s):   0-3
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts
    
  2. 8 GB pamięci RAM. (Patrz htopdane wyjściowe poniżej).

  3. 99,83 MHz prędkości magistrali płyty głównej
  4. Wewnętrzny dysk twardy 500 GB - jest to raport SMART z systemu operacyjnego:

    smartctl 6.6 2017-11-05 r4594 [x86_64-linux-4.15.0-33-generic] (local build)
    Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
    
    === START OF INFORMATION SECTION ===
    Model Family:     Western Digital Blue Mobile
    Device Model:     WDC WD5000LPVX-22V0TT0
    Serial Number:    WD-WXE1E13AAMR4
    LU WWN Device Id: 5 0014ee 25db04ba7
    Firmware Version: 01.01A01
    User Capacity:    500,107,862,016 bytes [500 GB]
    Sector Sizes:     512 bytes logical, 4096 bytes physical
    Rotation Rate:    5400 rpm
    Device is:        In smartctl database [for details use: -P show]
    ATA Version is:   ACS-2 (minor revision not indicated)
    SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
    Local Time is:    Wed Aug  7 15:52:05 2019 CET
    SMART support is: Available - device has SMART capability.
    SMART support is: Enabled
    
    === START OF READ SMART DATA SECTION ===
    SMART overall-health self-assessment test result: PASSED
    
    General SMART Values:
    Offline data collection status:  (0x00) Offline data collection activity
                        was never started.
                        Auto Offline Data Collection: Disabled.
    Self-test execution status:      (   0) The previous self-test routine completed
                        without error or no self-test has ever 
                        been run.
    Total time to complete Offline 
    data collection:        ( 8040) seconds.
    Offline data collection
    capabilities:            (0x7b) SMART execute Offline immediate.
                        Auto Offline data collection on/off support.
                        Suspend Offline collection upon new
                        command.
                        Offline surface scan supported.
                        Self-test supported.
                        Conveyance Self-test supported.
                        Selective Self-test supported.
    SMART capabilities:            (0x0003) Saves SMART data before entering
                        power-saving mode.
                        Supports SMART auto save timer.
    Error logging capability:        (0x01) Error logging supported.
                        General Purpose Logging supported.
    Short self-test routine 
    recommended polling time:    (   2) minutes.
    Extended self-test routine
    recommended polling time:    (  93) minutes.
    Conveyance self-test routine
    recommended polling time:    (   5) minutes.
    SCT capabilities:          (0x7035) SCT Status supported.
                        SCT Feature Control supported.
                        SCT Data Table supported.
    
    SMART Attributes Data Structure revision number: 16
    Vendor Specific SMART Attributes with Thresholds:
    ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
      1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       1
      3 Spin_Up_Time            0x0027   149   143   021    Pre-fail  Always       -       1541
      4 Start_Stop_Count        0x0032   057   057   000    Old_age   Always       -       43173
      5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
      7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
      9 Power_On_Hours          0x0032   083   083   000    Old_age   Always       -       12797
     10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
     11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
     12 Power_Cycle_Count       0x0032   091   091   000    Old_age   Always       -       9496
    191 G-Sense_Error_Rate      0x0032   001   001   000    Old_age   Always       -       250
    192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       399
    193 Load_Cycle_Count        0x0032   147   147   000    Old_age   Always       -       160989
    194 Temperature_Celsius     0x0022   101   092   000    Old_age   Always       -       42
    196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
    197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
    198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
    199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
    200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0
    
    SMART Error Log Version: 1
    No Errors Logged
    
    SMART Self-test log structure revision number 1
    No self-tests have been logged.  [To run self-tests, use: smartctl -t]
    
    SMART Selective self-test log data structure revision number 1
     SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
        1        0        0  Not_testing
        2        0        0  Not_testing
        3        0        0  Not_testing
        4        0        0  Not_testing
        5        0        0  Not_testing
    Selective self-test flags (0x0):
      After scanning selected spans, do NOT read-scan remainder of disk.
    If Selective self-test is pending on power-up, resume after 0 minute delay.
    

Są to wyniki wykorzystania zasobów dla htop:

  1  [|||||                    14.1%]   Tasks: 286, 1497 thr; 2 running
  2  [|||||                    13.2%]   Load average: 3.00 4.97 6.09 
  3  [|||||                    12.5%]   Uptime: 3 days, 16:12:35
  4  [|||                       9.3%]
  Mem[|||||||||||||||||||5.09G/7.61G]
  Swp[|||||||||||||||||||3.68G/4.65G]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 7006 jvb        20   0 6640M  102M  6780 S  5.3  1.3 18:53.18 java -Xmx3072m -X
 8224 kais     20   0 4537M  771M  200M S  6.6  9.9  2h31:23 /usr/lib/firefox/
 2299 kais     20   0 2958M  184M 42912 S  5.3  2.4 13:54.41 /usr/lib/firefox/
 1216 root       20   0  519M  120M 94640 S  5.3  1.5  1h52:50 /usr/lib/xorg/Xor
28401 kais     20   0 3354M  584M  107M S  7.9  7.5 34:44.51 /usr/lib/firefox/
 8439 kais     20   0 4537M  771M  200M S  4.6  9.9 37:06.21 /usr/lib/firefox/
 8831 kais     20   0 3222M  351M 64828 R  4.0  4.5 11:19.87 /usr/lib/firefox/
 7025 jvb        20   0 6640M  102M  6780 S  0.0  1.3  0:18.34 java -Xmx3072m -X
 7027 jvb        20   0 6640M  102M  6780 S  0.0  1.3  0:18.05 java -Xmx3072m -X
 5901 kais     20   0  7492  5612  2904 R  4.0  0.1  0:00.66 htop
 5329 kais     20   0  547M 47456 38388 S  1.3  0.6  0:01.29 /usr/lib/gnome-te
13540 kais     20   0 2958M  184M 42912 S  2.0  2.4  0:06.25 /usr/lib/firefox/
16897 kais     20   0  904M 28292 18076 S  2.0  0.4 50:08.37 pavucontrol
17999 kais     20   0 2424M 29460 25380 S  1.3  0.4 52:41.73 /usr/bin/pulseaud
F1 Help  F2 Setup  F3 Search  F4 Filter  F5 Tree  F6 SortBy F7 Nice  -  F8 Nice  +  F9 Kill  F10 Quit

to również wyniki statystyki VM wygenerowane przez polecenie vmstat 5.

AFAIK, bloatware nie powinno powodować, że system operacyjny przestanie odpowiadać, więc nie wziąłbym pod uwagę ani nawet nie zaakceptowałem faktu, że bloatware jest główną przyczyną problemu - ponieważ zadaniem systemu operacyjnego jest izolowanie procesów i zapewnianie wielozadaniowości.

Nie wiem, czy ten problem dotyczy systemu operacyjnego, sprzętu, czy konfiguracji.

Jakieś pomysły?

Kais
źródło
4
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu . Pamiętaj, aby w razie potrzeby zaktualizować Pytanie, aby uzyskać wyjaśnienia wynikające z komentarzy / czatu. Dziękuję Ci!
Jeff Schaller
3
Podejrzewam, że twój system często się zmienia; czy możesz uruchomić vmstat 5podczas działania systemu? Można wcześniej uruchomić vmstat i opublikować wiersze wydrukowane podczas zawieszenia. Szukam konkretnie kolumn sii so, które wskazują, ile system faktycznie zamienia. Czy możesz również opublikować dane wyjściowe topposortowane według zużycia pamięci (shift-M)? (lub jakikolwiek inny równoważny tryb htop)
marcelm
1
Gdy system plików jest prawie pełny, może stać się bardzo wolny. Nie jestem pewien, czy tak jest w przypadku ext4.
Nikt
1
@Kais Wypróbuj oba i zobacz, co działa? Moja zamiana wypełnia maksymalnie połowę tego, co przygotowałem, i nie powoduje to żadnego zawieszenia. To, czy ktoś odczuwa spowolnienie wynikające z zamiany, zależy również od wzorców użytkowania, więc nasze doświadczenia mogą się różnić.
JoL
2
Spróbuj całkowicie wyłączyć swap - to potwierdzi lub wyeliminuje przeładowanie dysku jako źródło problemu. Celem zamiany jest umieszczenie nieużywanych stron na dysku, ale jeśli większość stron jest rzeczywiście w użyciu, zamiana nie pomoże. Jeśli typowe obciążenie wymaga 10 GB stron rezydentnych, urządzenie o pojemności 8 GB będzie walczyć. Odpowiedzią na wyczerpanie zasobów jest albo zmniejszenie obciążenia, albo zwiększenie zasobu (w tym przypadku wypróbuj chrome lub dodaj więcej pamięci fizycznej).
bain

Odpowiedzi:

27

Co może spowodować, że Linux przestanie odpowiadać?

Przeciążenie dostępnej pamięci RAM, co powoduje dużą liczbę zamian, może to zrobić. Pamiętaj, że wejścia / wyjścia o losowym dostępie na mechanicznym dysku twardym wymagają przesunięcia głowicy odczytu / zapisu, która może wykonać tylko około 100 prób na sekundę.

Linux zwykle idzie na lunch całkowicie, jeśli przesadzisz z nadmiarem pamięci RAM. Mam też dysk spinny i 8 GB pamięci RAM. Miałem problemy z kilkoma programami z wyciekami pamięci. Oznacza to, że zużycie pamięci stale rośnie z czasem i nigdy się nie kurczy, więc jedynym sposobem na kontrolowanie go byłoby zatrzymanie oprogramowania, a następnie jego ponowne uruchomienie. Opierając się na doświadczeniach, jakie miałem w tym czasie, nie jestem zaskoczony słyszeniem opóźnień powyżej dziesięciu minut, jeśli generujesz 3 GB + wymiany.

Niekoniecznie zobaczysz to we wszystkich przypadkach, w których masz więcej niż 3 GB wymiany. Teoria mówi, że kluczową koncepcją jest drżenie . Z drugiej strony, jeśli próbujesz przełączać się między dwoma różnymi zestawami roboczymi, a to wymaga zamiany 3 GB wejścia i wyjścia, przy 100 MB / s zajmie to co najmniej 60 sekund, nawet jeśli wzorzec we / wy można idealnie zoptymalizować. W praktyce wzorzec We / Wy będzie daleki od optymalnego.

Po trudnościach, jakie miałem z tym, sformatowałem swoją przestrzeń wymiany do 2 GB (kilka razy mniejszą niż wcześniej), aby system nie był w stanie tak głęboko zamienić. Możesz to zrobić nawet bez zbędnego zmieniania rozmiaru partycji, ponieważ mkswappobiera opcjonalny parametr rozmiaru.

Zasadnicza równowaga polega na tym, że zabraknie pamięci i proces zostanie zabity, a system zawiesi się na tak długo, że zrezygnujesz i zrestartujesz komputer. Nie wiem, czy partycja wymiany 4 GB jest zbyt duża; to może zależeć od tego, co robisz. Ważne jest, aby uważać na to, kiedy dysk zaczyna się ubijać, sprawdzać zużycie pamięci i odpowiednio reagować.

Sprawdzanie wykorzystania pamięci przez aplikacje wieloprocesowe jest trudne. Aby zobaczyć użycie pamięci na proces bez podwójnego liczenia pamięci współużytkowanej, możesz użyć sudo atop -R, nacisnąć Mi m, i zajrzeć do kolumny PSIZE. Możesz także użyć smem. smem -t -P firefoxpokaże PSS wszystkich twoich procesów firefox, a następnie wiersz z całkowitym PSS. Jest to prawidłowe podejście do pomiaru całkowitego zużycia pamięci w przeglądarkach Firefox lub Chrome. (Chociaż istnieją również funkcje specyficzne dla przeglądarki, pokazujące użycie pamięci, które pokażą poszczególne zakładki).

sourcejedi
źródło
1
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Jeff Schaller
Warto rozważyć użycie metody ulimitkontrolowania wykorzystania procesów (jest to trudne w przypadku aplikacji wieloprocesowej, ale może być pomocne).
Toby Speight
2
@TobySpeight, jeśli chcesz ograniczyć wykorzystanie pamięci aplikacji, musisz użyć cgroups. ulimitnaprawdę nie pomaga.
sourcejedi
Tak, to prawdopodobnie lepszy wybór. W każdym razie naprawdę warto wspomnieć w odpowiedzi.
Toby Speight
2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- lub, jeśli używasz GUI, stwórz crontab, który uruchamia prosty skrypt (co około minutę), który sprawdza, ile wolnej pamięci RAM zostało, ostrzegając o tym. Stworzyłem własne dla Linux Mint i sporo się z tego nauczyłem. Możesz spróbować się pobawić.
Ismael Miguel
5

AFAIK, bloatware nie powinno powodować, że system operacyjny przestanie odpowiadać, więc nie wziąłbym pod uwagę ani nawet nie zaakceptowałem faktu, że bloatware jest główną przyczyną problemu

Nie spodoba ci się to, ale myślę, że twój problem to bloatware (chociaż nie jestem pewien, czy problem dotyczy pamięci czy dysku). Niestety, jądro Linuksa jest okropne w radzeniu sobie z sytuacjami wysokiego ciśnienia pamięci i wiadomo, że zasadniczo wymaga ponownego uruchomienia po wyczerpaniu pamięci. Są trzy rzeczy, które prowadzą mnie do wniosku, że twój problem to wyczerpanie zasobów:

  1. Twoje miejsce na dysku w katalogu głównym (/) i danych jest prawie pełne. Nie jestem pewien, do czego używasz DANYCH, ale wcześniej miałem problemy ze zmianą rozmiaru mojej partycji root i zbyt małym działaniem systemu.
  2. Masz wysoki poziom pamięci, co oznacza, że ​​pamięć RAM jest prawie pełna. Gdy pamięć RAM zacznie się zapełniać, zaczną pojawiać się błędy strony. Błędy strony występują, gdy jądro nie jest w stanie przydzielić wystarczającej ilości pamięci dla procesu i zamiast tego musi używać niektórych systemów o wiele wolniejszej przestrzeni wymiany. To prowadzi nas do naszej ostatniej obserwacji:
  3. Twoje miejsce wymiany jest prawie pełne. Wyraźnie widać duży nacisk pamięci w systemie, ponieważ zarówno pamięć RAM, jak i swap są prawie pełne.

Zasadniczo, połącz te trzy razem, a twój system nie będzie miał wystarczających zasobów, aby cokolwiek zrobić. Co do niefortunnego, jak słabo Linux radzi sobie z sytuacjami braku pamięci (w porównaniu np. Do jądra NT w Windowsie), ale wydaje się, że tak właśnie jest. Więcej dyskusji można znaleźć w tym wątku Reddit i powiązanej liście adresowej.

Jeśli chodzi o sposób naprawy sytuacji, powiedziałbym, że zwiększenie rozmiaru wymiany jest dobrym pomysłem, ale ponieważ masz mało miejsca na dysku, będzie to problem. Chyba, że ​​twój serwer Minecraft ma mnóstwo ludzi, myślę, że bezpiecznie byłoby zmniejszyć jego pamięć do około 1024m (osobiście używam 1024m z około 10 osobami i działa dobrze). Używałbym też czopa lub papieru do twojego serwera Minecraft, ponieważ wydają się one bardziej wydajne.

Powodzenia!

Gonić
źródło
7
Problemem jest pamięć, a nie dysk. To prawda, że ​​Linux jest zły pod wysokim ciśnieniem pamięci. Ale nie jest prawdą, że wymagane jest ponowne uruchomienie komputera. Jeśli uda ci się zwolnić trochę pamięci, Linux stanie się tak samo responsywny jak wcześniej, zanim ciśnienie pamięci przekroczyło dostępną pojemność.
Gilles „SO- przestań być zły”
1
@Kais Powiedziałem „to prowadzi nas do naszej ostatniej obserwacji” jako segue, ponieważ mówiłem o przestrzeni wymiany i nadal będę o tym mówił w punkcie 3. O Minecraft, wyglądało to tak, jakbyś miał serwer Minecraft i przydzielił 3G RAM do tego. Mówiłem tylko, że jeśli nie masz na tym mnóstwo ludzi, możesz nie potrzebować tyle pamięci RAM. Powiedziałem, że „wydają się być bardziej wydajni”, gdy mówimy o papierze i króćcu, które są alternatywnymi serwerami Minecraft, które mają lepszą wydajność w porównaniu do waniliowego MC.
Chase
2
Słyszałem, że generalnie używanie swapów w ogóle jest złym pomysłem? Przynajmniej w środowisku serwerowym, kiedy zamrażanie na 12 minut jest niedopuszczalne?
9ilsdx 9rvj 0lo
2
@Kais, z mojego doświadczenia, Windows jest jeszcze gorszy w przypadku programów innych niż GUI, ale zawiesi nieprzykładowe programy GUI, jeśli presja pamięci jest wysoka, co rozwiązuje problem na pulpicie, przy założeniu, że aplikacje komputerowe nie mają tła zadania
Simon Richter,
2
Może Vanilla Minecraft; ale duże modpaki z łatwością osiągają 3 GiB, zanim gracz dołączy jeszcze :)
Luaan
4

Jaka jest wydajność free -m? Ilość pamięci RAM, którą masz, nie ma sensu, jeśli nie wiemy, ile zużywasz. To i jestem zainteresowany, aby dowiedzieć się, ile przestrzeni wymiany jest używane.

Myślę jednak, że odpowiedziałeś na własne pytanie. Otwarcie w przeglądarce „wielu kart” może zdecydowanie spowolnić system, jeśli nigdy ich nie zamykasz, ponieważ niezależnie od tego będą one zużywać pamięć; kiedy system zawiesza się, ile masz otwartych jednocześnie?

Ma to również sens, jeśli system zawiesza się przed innymi zadaniami wymagającymi dużej ilości pamięci, takimi jak „generowanie bardzo dużego wykresu z bardzo złożonego diagramu UML”. To absolutnie spowolni twój system podczas generowania wykresu, więc nie jest to niespodzianką.

To naprawdę brzmi tak, jak powinien zachowywać się twój system. Albo to, albo coś mi brakuje.

Nawiasem mówiąc, statystyki HDD nie mają znaczenia, jeśli system przestaje odpowiadać, ponieważ przyczyną jest prawie zawsze brak pamięci.

Zach Sanchez
źródło
1
„To absolutnie spowolni twój system” - Tak, jest to oczekiwane, ale nie należy oczekiwać spowodowania niekontrolowanej sesji X (tj. Wyniku zamrożonego systemu), gdzie nie widzę ruchu kursora myszy.
Kais
1
Tego można się było spodziewać, opisywane zachowanie jest dokładnie tym, co dzieje się, gdy używam zbyt dużo pamięci RAM w moim systemie. Nawet mój system zapchał się do tego stopnia, że ​​nie mogłem przełączyć się na terminal tekstowy, a ja mam podwójną pamięć RAM. Jeśli kiedykolwiek spotkasz się z sytuacją, w której nie możesz użyć sesji X, musisz przełączyć się na terminal tekstowy i zabić obrażające go procesy. Jeśli to się nie powiedzie, będziesz musiał przeprowadzić twardy restart. O najlepszym, co mogę ci powiedzieć.
Zach Sanchez
1
@Kais macOS również staje się powolny w sytuacjach niskiej pamięci. Naprawdę nie ma sposobu, aby system rozsądnie zdecydował, jaką pamięć absolutnie musi przechowywać w pamięci RAM, więc przełączanie między aplikacjami zamieniałoby się jak szalone, do momentu, w którym interfejs użytkownika przestaje odpowiadać.
Kusalananda
5
ehh, to nie jest tak, że nie ma bardziej skutecznych sposobów na utrzymanie interfejsu użytkownika „menedżera okien”. Badania MS napisały cały eksperymentalny system operacyjny na projekcie, który zabraniał stronicowania popytu. Dowód koncepcji: uruchom „menedżera okien” w Midori, emuluj aplikacje Linux, w tym swap. Proszę bardzo, „menedżer okien” pozostanie responsywny nawet w przypadku zamiany aplikacji. Przynajmniej może to niezawodnie zabić niektóre aplikacje w celu zwolnienia pamięci. Linux nie jest idealny. Przełączanie gnomów z X11 na Wayland nawet znacznie pogorszyło szybkość reakcji na przeciążone systemy.
sourcejedi
2
Statystyki HDD mogą mieć znaczenie. Jedną z możliwych przyczyn braku odpowiedzi jest awaria dysku, co powoduje ogromne zaległości we / wy. Ale w tej sprawie nie widzę żadnych dowodów na to.
200_sukces
4

Kiedy czytałem ten tytuł, od razu pomyślałem, że „nie ma wystarczającej ilości pamięci RAM”, ponieważ sam doświadczyłem dokładnie tego problemu w Linuksie, ponad 10 minut szaleńczego szarpania dysku po otwarciu zbyt wielu kart przeglądarki. Zgadzam się, to jest ponure i wymaga poprawy. Windows radzi sobie z tą sytuacją znacznie lepiej.

Jakieś sugestie:

  • Dodaj aplet monitora pamięci do zasobnika systemowego, aby mieć go na oku.
  • W preferencjach Firefoksa ustaw „limit procesu zawartości” na „1”. Jak napisano w poniższym ustawieniu: „Dodatkowe procesy zawartości mogą poprawić wydajność przy korzystaniu z wielu kart, ale zużyją również więcej pamięci”.
  • Usuń lub zamień wszystkie głodne pamięci dodatki do przeglądarki. Zachowaj blokadę reklam, ponieważ reklamy zużywają więcej pamięci niż jakikolwiek bloker.
  • Zbadaj i ewentualnie usuń inne programy wymagające pamięci.

Jednak jedynym prawdziwym rozwiązaniem jest zakup większej ilości pamięci RAM.

Obfitość pamięci RAM nie tylko zapobiegnie tej katastrofie, ale pozwoli systemowi na utworzenie dużej pamięci podręcznej plików w pamięci RAM, czego system obecnie nie może zrobić, ponieważ działa tak blisko limitu. Duża pamięć podręczna plików zabierze pracę z dysku twardego i sprawi, że prawie każda akcja w systemie będzie generalnie szybsza. To jest tego warte.

Boann
źródło
Świetna odpowiedź, wielkie dzięki. Ale w odniesieniu do „Dodatkowe procesy zawartości mogą poprawić wydajność przy korzystaniu z wielu kart, ale będą również wymagały więcej pamięci”. - Jeśli dobrze rozumiem, czy Firefox może otworzyć do 8 procesów na kartę, przy ustawieniu domyślnym?
Kais,
1
@Kais Myślę, że to 1 proces na kartę. W każdym razie, jeśli ustawisz limit na 1, będzie to 1 proces łącznie dla wszystkich kart, co powinno zużywać mniej pamięci.
Boann
Zrozumiałem, jeszcze raz dziękuję.
Kais,
4

Twoje wyjście htop pokazuje, że potrzebujesz więcej pamięci RAM niż pojemność (całkowita pamięć RAM + SWAP). Oczywistym pierwszym czynnikiem, który należy rozważyć, jest zmniejszenie zużycia pamięci RAM lub zwiększenie dostępności pamięci RAM.

Zwróć uwagę, że współczesne wersje firefox są bardzo wymagające zasobów, ze względu na sposób, w jaki okna / karty mają przydzielone miejsce na proces i pamięć. Chodziło o to, aby uniknąć awarii kart, powodując, że cała przeglądarka padnie na kolana. Czy to jest warte swojej ceny? Kto może powiedzieć ... W każdym razie miałem podobny problem z powodu powyższego, ponieważ moja płyta główna Pentium 4 obsługuje tylko 2 GB pamięci RAM. Aby uniknąć możliwych awarii pamięci, dodałem ~ 800M miejsca wymiany na zapasowym dysku SSD, oczywiście z zamiarem korzystania z niego jak najmniej. Osiągnąłem to, zmieniając ustawienie zwane swapiness, które określa, jak chętnie jądro wymienia strony pamięci. Niektóre przydatne polecenia w następujący sposób.

Sprawdź aktualną zamianę: cat /proc/sys/vm/swappiness

Może to dać wynik około 60, który jest dość wysoki dla maksymalnej wydajności w systemach o niższym obciążeniu. Dla ciebie to oczywiście działa przeciwnie do zamierzonego, więc możesz zmienić to ustawienie za pomocą polecenia, np. sysctl vm.swappiness=1Zmienić ustawienie, gdy system jest uruchomiony.

Aby zapisać te zmiany, musisz poszukać pliku /etc/sysctl.conf. W tym pliku zmień wartość lub dodaj linię vm.swappiness=1.

Pamiętaj, że to nie jest rozwiązanie w twoim przypadku, ale powinno być użytecznym obejściem.

Kredyty https://askubuntu.com/questions/103915/how-do-i-configure-swappiness

źródło powyższej odpowiedzi zawiera dalsze wyjaśnienia. Uważam ten post za bardzo pomocny w moim przypadku.

Mr. Donutz
źródło
Dzięki za twoją odpowiedź. To wydaje się być dobrą rekomendacją dla konfiguracji VM.
Kais
2

Doskonała dyskusja na temat tego, w jaki sposób problem jest wywoływany, trwa i rośnie. Lubię wyprzedzać takie problemy, jakie występują, rzucając sprzęt na początkowy projekt komputera i / lub aktualizując istniejącą implementację. Czy możesz,

  • dodaj pamięć RAM (32 GB działa świetnie dla wielu konfiguracji)

  • wymień dysk twardy na dysk SSD

  • dodaj dysk SSD (Solid State Drive) dla dysku wymiany

  • utwórz partycję wymiany w pamięci RAM (z 32 lub więcej GB pamięci RAM)

  • uzyskaj szybszy dysk twardy

  • przejdź do systemu z szybszym przetwarzaniem i szerszą / szybszą architekturą magistrali.

Niektóre z tych aktualizacji / wymiany sprzętu mogą być znacznie niższe niż 100 USD. Nie dotyczy to Linuksa ani konkretnych implementacji oprogramowania, ale sprzęt, którego używasz, nie wydaje się odpowiedni do twoich zadań.

Stary wujek Ho
źródło
1
Bardzo przydatna odpowiedź, dziękuję za wskazanie zaleceń dotyczących wymiany sprzętu.
Kais
1
Mam nadzieję, że to pomoże. Nie wiem, jaki typ komputera lub konkretnego sprzętu, więc są to ogólne kroki, w kolejności najbardziej prawdopodobnej poprawy. Dowolne lub wszystkie pomogłyby w spowolnieniu, które najprawdopodobniej spowodowane jest przeładowaniem pamięci podręcznej, zamianą oraz ogólnie szybszym i mniejszym odczytem / zapisem dysku
Old Uncle Ho
6
Większość z nich to dobre sugestie, ale zamiana na pamięć RAM jest w zasadzie bezużyteczna, chyba że używasz zram lub zswap do skompresowanego przełączania na pamięć RAM - są one warte zachodu , ale zamiana na nieskompresowany ramdysk po prostu wytwarza tyle samo obciążenia pamięci RAM, ile zmniejsza ( w rzeczywistości bardzo nieznacznie więcej z powodu kosztów ogólnych).
cas
Nie jestem pewien, dlaczego ktokolwiek miałby zamienić się na pamięć RAM, z wyjątkiem kompresji, co wydaje się świetnym pomysłem na obciążenia o wysokiej pamięci RAM / niskim procesorze.
Peter - Przywróć Monikę
1
@bain: jak to jest zawsze lepiej mieć stron wyswapowany do RAM vs. jeszcze odwzorowany? Nadal używają tyle samo stron fizycznej pamięci RAM, chyba że używasz kompresji. Tam jest wartość. Jedyną różnicą jest większa księgowość, ale może czystsze tabele stron sprzętowych. W przypadku pamięci tylko do uruchamiania, która w zasadzie nie uwzględnia mapowania, np. Funkcje / dane, które są dotykane tylko podczas uruchamiania, zamiana na dysk jest lepsza, ponieważ nie zajmuje miejsca w pamięci DRAM. W przypadku demonów w tle, które nie są używane interaktywnie, opóźnienie nie jest ważne, więc ponownie wygrywa zamiana dysku.
Peter Cordes,
2

Zwykle „tylko” X11 staje się bezużyteczny. Aby uzyskać naciśnięcie klawisza z klawiatury do programu i wyświetlać wszystko na ekranie, należy uruchomić kod w kilku różnych procesach. (Serwer X, aby uzyskać naciśnięcie klawisza z jądra, xterm lub odpowiednika, aby uzyskać zdarzenie i zdecydować o narysowaniu czegoś, a następnie wysłać wiadomość do serwera X, aby narysować glif z czcionki.)

Wystarczy machnięcie myszą nad oknem za pomocą przeglądarki internetowej pokazującej stronę z wieloma bzdurami Javascript może spowodować powstanie wielu wiadomości dla wielu procesów, z których wszystkie powodują, że procesy te się budzą i dotykają wielu danych. Prawdopodobnie zawiera kilka „buforowanych” nieskompresowanych bitmap. Jest więc wysoce prawdopodobne, że spowoduje to eksmisję większej liczby rzeczy, które wkrótce będą potrzebne.

ctrl + alt + F2, aby przełączyć się na inną wirtualną konsolę, zazwyczaj umożliwia logowanie się i uruchamianie poleceń powłoki z zaledwie kilku sekundowym opóźnieniem, gdy coś powoduje wyrzucenie wymiany. To tylko bash; jądro Linuksa nie jest wymienne i ma cały
kod VT i klawiaturę <-> TTY.


Aby uniknąć spowolnienia, gdy nie jesteś naprawdę thrashowaniem, pomocne może być zmniejszenie „zamiany”. np. ustawiłem /proc/sys/vm/swappinessprzestrajanie 6na moim pulpicie z 16 GB pamięci RAM i 2 GB partycji wymiany na dysku SSD NVMe. Możesz przeczytać więcej o dostrajaniu pod kątem opóźnień interaktywnych (w przeciwieństwie do przepustowości serwera); jakikolwiek przewodnik wspomina o możliwości przestrajania.

Ale jeśli w ogóle masz zamianę, Linux użyje jej przed wywołaniem zabójcy OOM. Utrzymuj małą partycję wymiany , na tyle dużą, aby Linux mógł odrzucić naprawdę stare bzdury, które zwykle nie są używane przez długi czas. (np. wycieki pamięci!)

Nie miałem żadnych problemów z zapełnieniem wymiany. Współczesny Linux radzi sobie z ograniczoną przestrzenią wymiany. Chrom (którego używam zamiast firefoxa) czasami staje się powolny z dziesiątkami otwartych kart Przepełnienia stosu, ale The Great Suspender to miły dodatek do rozładowywania kart, gdy ich nie używasz. Myślę, że oszczędza to dla mnie znaczną pamięć RAM, chociaż zwalnia tylko karty, w których nie wpisałeś niczego w polu tekstowym. Może być również dostępny dla przeglądarki Firefox.


Jak sugerują inni, 16 GB pamięci RAM jest naprawdę przydatne do interaktywnego użytku z Linuksem. Ceny DRAM są obecnie stosunkowo niskie ; po gwałtownym wzroście około 1,5 roku temu, przeważnie znów spadły.

Peter Cordes
źródło
Świetna odpowiedź, wielkie dzięki. Ale jeśli chodzi o „garść bzdur JavaScript, to może wiązać się z wieloma wiadomościami dla wielu procesów, które wszystkie powodują, że procesy te budzą się i dotykają szeregu danych” - zastanawiam się, co to za procesy, czy to Firefox procesy potomne?
Kais,
@Kais: Menedżer okien, przeglądarka internetowa, serwer X, ewentualnie inni klienci X na bardziej skomplikowanym pulpicie. I wszelkie inne procesy, w których oknach macha twoja mysz (właśnie o tym myślałem, kiedy napisałem to zdanie). np. w KDE pasek zadań jest oddzielnym procesem ( plasma) od kwinmenedżera okien.
Peter Cordes,
Używam LXDE, więc w moim przypadku tylko Openbox i serwer XOrg są procesami, które mogą się obudzić? Jakie wiadomości są do nich przekazywane?
Kais,
@Kais: komunikaty protokołu X11 przez gniazdo w domenie unix. Spróbuj uruchomić xevjakiś czas, aby zobaczyć, jakie wiadomości możesz uzyskać po poruszeniu myszą. Spróbuj także strace xevzobaczyć wywołania systemowe, które dotyczą strony klienta.
Peter Cordes,
Rozumiem dzięki. Podczas uruchamiania xevpolecenia otrzymuję wiadomości tylko przez przełączanie się do różnych okien i klikanie ich, ale nie dzieje się tak, gdy po prostu przesuwam kursor myszy.
Kais,
-2

Co może sprawić, że Linux nie będzie reagował przez kilka minut podczas przeglądania niektórych stron internetowych?

Nie używasz poprawnie Linuksa. Co staje się szczególnie widoczne na maszynie o ograniczonych zasobach. Nie potrzebujesz więcej pamięci RAM ani szybszego procesora.

Tło:

Almost every non-user program’s priority is 0.
Almost every user program’s priority is 20.

Aby „naprawić” problem:

Pozostaw programy niebędące użytkownikami w spokoju, ale zacznij zmieniać priorytety (ładne poziomy) swoich programów użytkownika, aby nie powodowały problemów. Edytuj, co uruchamia twoje programy, aby zawierały ładne poziomy, od zazwyczaj nie stanowiącego problemu, do najgorszego przestępcy.

Przykłady ze świata rzeczywistego:

KMail:          nice -n 1 kmail -caption "%c" %i %m
LibreOffice:    nice -n 2 libreoffice --writer %U
Firefox:        nice -n 3 firefox %u
WorstOffender:  nice -n 9 {i'm a bad program}

Twój WorstOffender nadal nie będzie reagował przez kilka minut, to dosłownie problem z zakupem lepszego pudełka, ale teraz nie spowoduje to, że cały system operacyjny (Linux) i wszystko, co masz uruchomione, również przestanie odpowiadać.

Michał
źródło
2
Przez dziesięciolecia pracowałem z Linuksem zarówno na wielu serwerach, jak i na własnej stacji roboczej (często w bardzo ograniczonej konfiguracji maszyn wirtualnych) i ani razu nie musiałem naprawiać problemu z wydajnością związaną z pamięcią RAM nice -n. „Nie potrzebujesz więcej pamięci RAM” - z pewnością potrzebuje więcej pamięci RAM; lub może użyć, ulimitaby mocno ograniczyć najgorszych przestępców, aby jego obecna pamięć RAM była znowu wystarczająca. „Nie używasz poprawnie Linuksa”. jest całkowicie wyłączony.
AnoE
Pracowałem z instalacjami GUI Linuksa na sprzęcie o ograniczonych zasobach przez ostatnie 22 lata, a „miłe” prace rozwiązują utrzymywanie „Linuksa nie reaguje przez kilka minut”
Michael,
Nie przeczę, że to działa; Mówię tylko, że wprowadzenie go dalej jak w „prawo” sposób pracy z systemem Linux może nie być najlepszym rozwiązaniem.
AnoE