Điều gì có thể khiến Linux không phản hồi trong vài phút khi duyệt các trang web nhất định?


28

Tôi đang sử dụng Linux 4.15 và điều này xảy ra với tôi nhiều lần khi tôi duyệt Google, Facebook hoặc bất kỳ trang web nào đói tài nguyên khác - Toàn bộ HĐH trở nên không phản hồi, đóng băng và vô dụng. Điều duy nhất tôi thấy nó đang hoạt động là đĩa (phân vùng hệ thống chính được định dạng là ext4), được sử dụng ồ ạt (điều chỉnh I / O).

Tôi bị buộc phải chờ đợi một phút hoặc nhiều hơn để thoát khỏi sự phình to, đôi khi nó không phản hồi trong mười hai phút, và do đó tôi cảm thấy thất vọng. Thực tế là hệ điều hành không thể xử lý tốt đa nhiệm, có xu hướng phản ánh một hành vi hoàn toàn kỳ lạ và không thể chấp nhận được.

Không chỉ điều này xảy ra với Firefox, mà với bất kỳ ứng dụng trình thông dịch javascript nào bao gồm Microsoft VSCode hoặc angular-cli ( ng servelệnh) cũng như bất kỳ luồng thực thi đói tài nguyên nào khác - chẳng hạn như trường hợp plantuml khi tạo một biểu đồ rất lớn từ một sơ đồ UML rất phức tạp.

Ngày nay, HĐH trở nên hoàn toàn không thể quản lý được, sau khi khởi chạy phần mềm khôi phục dữ liệu cho ổ cứng gắn ngoài (trên phân vùng ext4) gần đây đã bị rút khỏi cổng USB xấu chỉ bằng một động tác nhỏ.

Tôi không thể nói nguyên nhân sâu xa đằng sau hành vi lỗi như vậy

Tôi có nhiều tab được mở trong trình duyệt và 94% sử dụng phân vùng hệ điều hành theo dfđầu ra:

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

Là phần cứng, tôi đang sử dụng:

  1. Intel Core i3 v2348M theo 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. RAM 8 GB. (Xem htopđầu ra bên dưới).

  3. 99,83 MHz tốc độ bus chính
  4. Ổ cứng trong 500 GB - Đây là báo cáo SMART từ hệ điều hành:

    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.
    

Đây là kết quả của việc sử dụng tài nguyên trên mỗi 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

Đó cũng là kết quả của thống kê VM, được tạo bởi lệnh vmstat 5.

AFAIK, bloatware không làm cho HĐH không phản hồi, vì vậy tôi sẽ không xem xét hoặc thậm chí chấp nhận rằng bloatware là nguyên nhân cốt lõi của vấn đề - vì công việc của HĐH đang cách ly các quy trình và đảm bảo đa nhiệm.

Tôi không biết vấn đề này là dành riêng cho hệ điều hành, dành riêng cho phần cứng hay cấu hình cụ thể.

Có ý kiến ​​gì không?


4
Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện . Vui lòng đảm bảo cập nhật Câu hỏi khi cần thiết cho bất kỳ sự làm rõ nào xuất phát từ các bình luận / trò chuyện. Cảm ơn bạn!
Jeff Schaller

3
Tôi nghi ngờ hệ thống của bạn đang trao đổi rất nhiều; bạn có thể chạy vmstat 5trong khi hệ thống của bạn đang hoạt động? Bạn có thể bắt đầu vmstat trước và đăng các hàng được in trong thời gian đóng băng. Tôi đang tìm cách cụ thể cho sisocột, trong đó chỉ ra bao nhiêu hệ thống được thực sự trao đổi. Ngoài ra, bạn có thể đăng đầu ra của top, được sắp xếp theo mức sử dụng bộ nhớ (shift-M) không? (hoặc bất kể chế độ htop tương đương là gì)
marcelm

1
Khi một hệ thống tập tin gần đầy, nó có thể trở nên rất chậm. Tôi không chắc đây có phải là trường hợp của ext4 không.
Không ai

1
@Kais Hãy thử cả hai và xem những gì hoạt động? Trao đổi của tôi lấp đầy tối đa một nửa những gì tôi đã chuẩn bị và nó không gây ra cho tôi bất kỳ sự đóng băng nào. Việc một người có bị chậm lại hay không do sử dụng trao đổi cũng phụ thuộc vào kiểu sử dụng mà tôi nghĩ, vì vậy trải nghiệm của chúng tôi có thể khác nhau.
JoL

2
Hãy thử vô hiệu hóa trao đổi hoàn toàn - điều đó sẽ xác nhận hoặc loại bỏ việc đập đĩa là nguồn gốc của vấn đề. Điểm quan trọng của việc hoán đổi là đưa các trang không sử dụng vào đĩa, nhưng nếu hầu hết các trang thực sự được sử dụng, thì việc hoán đổi sẽ không giúp ích gì. Nếu khối lượng công việc thông thường của bạn yêu cầu 10GB trang lưu trú, thì máy 8GB sẽ gặp khó khăn. Câu trả lời cho việc cạn kiệt tài nguyên là giảm khối lượng công việc hoặc tăng tài nguyên (trong trường hợp này, hãy thử chrome hoặc thêm bộ nhớ vật lý).
Bain

Câu trả lời:


27

Điều gì có thể làm cho Linux không phản hồi?

Quá nhiều RAM có sẵn, gây ra một lượng lớn trao đổi, chắc chắn có thể làm điều này. Hãy nhớ rằng I / O truy cập ngẫu nhiên trên ổ cứng cơ học của bạn yêu cầu di chuyển đầu đọc / ghi, chỉ có thể thực hiện khoảng 100 lần tìm kiếm mỗi giây.

Thông thường, Linux sẽ hoàn toàn ra ngoài ăn trưa, nếu bạn quá tải RAM "quá nhiều". Tôi cũng có một đĩa spinny và RAM 8GB. Tôi đã gặp vấn đề với một vài phần mềm bị rò rỉ bộ nhớ. Tức là việc sử dụng bộ nhớ của họ tiếp tục tăng theo thời gian và không bao giờ bị thu hẹp, vì vậy cách duy nhất để kiểm soát nó là dừng phần mềm và sau đó khởi động lại nó. Dựa trên những kinh nghiệm tôi đã có trong thời gian này, tôi không ngạc nhiên khi nghe thấy sự chậm trễ hơn mười phút, nếu bạn đang tạo ra 3GB + trao đổi.

Bạn sẽ không nhất thiết phải thấy điều này trong mọi trường hợp bạn có nhiều hơn 3 GB trao đổi. Lý thuyết nói rằng khái niệm quan trọng là đập . Mặt khác, nếu bạn đang cố gắng chuyển đổi giữa hai bộ làm việc khác nhau và nó yêu cầu trao đổi 3GB vào và ra, với tốc độ 100 MB / giây, sẽ mất ít nhất 60 giây ngay cả khi mẫu I / O có thể được tối ưu hóa hoàn hảo. Trong thực tế, mẫu I / O sẽ không còn tối ưu.

Sau những khó khăn tôi gặp phải, tôi đã định dạng lại không gian hoán đổi của mình thành 2GB (nhỏ hơn nhiều lần so với trước đây), vì vậy hệ thống sẽ không thể trao đổi sâu như vậy. Bạn có thể làm điều này ngay cả khi không phải thay đổi kích thước phân vùng, bởi vì mkswapcó một tham số kích thước tùy chọn.

Sự cân bằng thô là giữa việc hết bộ nhớ và khiến các tiến trình bị giết, và hệ thống bị treo quá lâu đến nỗi bạn bỏ cuộc và khởi động lại bằng mọi cách. Tôi không biết nếu phân vùng trao đổi 4GB quá lớn; nó có thể phụ thuộc vào những gì bạn đang làm. Điều quan trọng là để ý khi đĩa bắt đầu hoạt động, kiểm tra mức sử dụng bộ nhớ của bạn và phản hồi tương ứng.

Kiểm tra sử dụng bộ nhớ của các ứng dụng đa quy trình là khó khăn. Để xem sử dụng bộ nhớ cho mỗi quá trình mà không cần bộ nhớ đúp đếm chia sẻ, bạn có thể sử dụng sudo atop -R, nhấn Mm, và nhìn vào cột PSIZE. Bạn cũng có thể sử dụng smem. smem -t -P firefoxsẽ hiển thị PSS của tất cả các quy trình firefox của bạn, theo sau là một dòng có tổng PSS. Đây là cách tiếp cận chính xác để đo tổng mức sử dụng bộ nhớ của các trình duyệt dựa trên Firefox hoặc Chrome. (Mặc dù cũng có các tính năng dành riêng cho trình duyệt để hiển thị mức sử dụng bộ nhớ, sẽ hiển thị các tab riêng lẻ).


1
Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Jeff Schaller

Có thể đáng để xem xét việc sử dụng ulimitđể cố gắng kiểm soát việc sử dụng của các quy trình (thật khó khăn với một ứng dụng đa quy trình, nhưng có thể hữu ích).
Toby Speight

2
@TobySpeight nếu bạn muốn hạn chế sử dụng bộ nhớ ứng dụng thì bạn cần sử dụng các nhóm. ulimitthực sự không giúp được gì
nguồn

Vâng, đó có thể là một lựa chọn tốt hơn. Dù sao, nó thực sự đáng được đề cập trong câu trả lời.
Toby Speight

2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- hoặc, nếu bạn sử dụng GUI, hãy tạo một crontab chạy một tập lệnh đơn giản (mỗi phút hoặc lâu hơn) để kiểm tra xem bạn còn bao nhiêu RAM miễn phí, cảnh báo bạn về nó. Tôi đã tạo riêng cho Linux Mint và tôi đã học được khá nhiều từ nó. Đó là thứ bạn có thể thử và chơi xung quanh.
Ismael Miguel

5

AFAIK, bloatware không làm cho hệ điều hành không phản hồi, vì vậy tôi sẽ không xem xét hoặc thậm chí chấp nhận rằng bloatware là nguyên nhân gốc rễ của vấn đề

Bạn sẽ không thích điều này, nhưng tôi nghĩ bloatware vấn đề của bạn (mặc dù tôi không chắc đó là bộ nhớ hay ổ đĩa là vấn đề). Thật không may, nhân Linux rất tệ trong việc xử lý các tình huống áp suất bộ nhớ cao và về cơ bản được biết là cần phải khởi động lại một khi bộ nhớ đã cạn kiệt. Có ba điều khiến tôi tin rằng vấn đề của bạn là cạn kiệt tài nguyên:

  1. Dung lượng đĩa của bạn trên root (/) và DATA đã gần đầy. Tôi không chắc chắn bạn sử dụng DATA để làm gì, nhưng tôi đã gặp vấn đề trước khi thay đổi kích thước phân vùng gốc của mình quá nhỏ và hệ thống của tôi không thể hoạt động.
  2. Bạn có áp lực bộ nhớ cao, có nghĩa là RAM của bạn đã gần đầy. Khi RAM bắt đầu đầy, bạn sẽ bắt đầu gặp lỗi trang. Lỗi trang xảy ra khi kernel không thể phân bổ đủ bộ nhớ cho một tiến trình và thay vào đó phải sử dụng một số hệ thống không gian hoán đổi chậm hơn nhiều. Điều này dẫn chúng ta đến sự quan sát cuối cùng của chúng ta:
  3. Không gian hoán đổi của bạn đã gần đầy. Rõ ràng có một số áp lực bộ nhớ cao trên hệ thống của bạn vì cả RAM và trao đổi đều gần đầy.

Về cơ bản, kết hợp ba thứ này lại với nhau và hệ thống của bạn không có đủ tài nguyên để làm bất cứ điều gì. Thật không may là Linux xử lý các tình huống bộ nhớ thấp kém như thế nào (so với, hạt nhân NT trong Windows) nhưng dường như nó là như vậy. Bạn có thể tìm thấy nhiều cuộc thảo luận hơn trong chuỗi Reddit này và danh sách gửi thư được liên kết của nó.

Về cách khắc phục tình trạng của bạn, tôi sẽ nói rằng việc tăng kích thước trao đổi của bạn là một ý tưởng hay, nhưng vì bạn có dung lượng ổ đĩa thấp sẽ là một vấn đề. Trừ khi máy chủ Minecraft của bạn có rất nhiều người, tôi nghĩ sẽ an toàn khi giảm bộ nhớ xuống khoảng 1024m (cá nhân tôi sử dụng 1024m với khoảng 10 người và nó hoạt động tốt). Tôi cũng sẽ sử dụng spigot hoặc giấy cho máy chủ Minecraft của bạn vì chúng có xu hướng hiệu quả hơn.

Chúc may mắn!


7
Bộ nhớ rõ ràng là vấn đề, không phải đĩa. Đúng là Linux rất tệ dưới áp lực bộ nhớ cao. Nhưng sự thật là không cần thiết phải khởi động lại. Nếu bạn quản lý để giải phóng một số bộ nhớ, Linux sẽ trở nên phản ứng nhanh như trước khi áp suất bộ nhớ vượt quá dung lượng khả dụng.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Kais Tôi đã nói "điều này dẫn chúng ta đến lần quan sát cuối cùng" như một sự khác biệt vì tôi đã nói về không gian hoán đổi và sẽ tiếp tục nói về nó ở điểm 3. Về Minecraft, có vẻ như bạn đang điều hành một máy chủ Minecraft và đã được phân bổ 3G của RAM. Tôi chỉ nói rằng trừ khi bạn có rất nhiều người chơi cùng lúc, bạn có thể không cần nhiều RAM như vậy. Tôi đã nói "họ có xu hướng hoạt động nhiều hơn" khi nói về giấy và spigot, những máy chủ Minecraft thay thế có tính năng hoạt động tốt hơn MC vanilla.
Đuổi theo

2
Tôi đã nghe nói rằng thường sử dụng trao đổi là một ý tưởng tồi? Ít nhất trong môi trường máy chủ, khi đóng băng trong 12 phút không được chấp nhận?
9ilsdx 9rvj 0lo

2
@Kais, theo kinh nghiệm của tôi, Windows thậm chí còn tệ hơn với các chương trình không phải GUI, nhưng nó sẽ tạm dừng các chương trình GUI không phải nền trước nếu áp suất bộ nhớ cao, giải quyết vấn đề cho máy tính để bàn, theo giả định rằng các ứng dụng máy tính để bàn không có nền nhiệm vụ.
Simon Richter

2
Vanilla Minecraft có thể; nhưng các modpack lớn dễ dàng đạt được 3 GiB trước khi người chơi thậm chí tham gia :)
Luaan

4

Đầu ra của free -mcái gì? Dung lượng RAM bạn có là vô nghĩa nếu chúng tôi không biết bạn đang sử dụng bao nhiêu. Điều đó và tôi quan tâm để biết có bao nhiêu không gian trao đổi đang được sử dụng.

Tôi nghĩ rằng bạn đã trả lời câu hỏi của riêng bạn, mặc dù. Việc mở "nhiều tab" mở trong trình duyệt của bạn chắc chắn có thể làm chậm hệ thống của bạn nếu bạn không bao giờ đóng chúng, vì chúng sẽ tiếp tục tiêu thụ bộ nhớ bất kể; Khi hệ thống của bạn đóng băng, có bao nhiêu bạn mở một lúc?

Cũng có ý nghĩa nếu hệ thống của bạn đóng băng từ các tác vụ cần nhiều bộ nhớ khác, chẳng hạn như "tạo một biểu đồ rất lớn từ sơ đồ UML rất phức tạp". Điều đó sẽ hoàn toàn làm chậm hệ thống của bạn khi nó tạo ra biểu đồ, do đó, điều đó hầu như không gây ngạc nhiên.

Nó thực sự có vẻ như đây là cách mà hệ thống của bạn được cho là hành xử. Hoặc là hoặc tôi đang thiếu một cái gì đó ở đây.

Nhân tiện, số liệu thống kê ổ cứng không thành vấn đề khi hệ thống của bạn trở nên không phản hồi vì thiếu bộ nhớ hầu như luôn là thủ phạm.


1
"Điều đó sẽ làm chậm hoàn toàn hệ thống của bạn" - Có, điều này được mong đợi, nhưng không thể tạo ra phiên X không kiểm soát được (tức là kết quả của hệ thống bị đóng băng), trong đó tôi không thể thấy con trỏ chuột di chuyển.
Kais

1
Điều đó thực sự sẽ được mong đợi, hành vi bạn mô tả chính xác là những gì xảy ra khi tôi sử dụng quá nhiều RAM trên hệ thống của mình. Tôi thậm chí đã có hệ thống của mình bị tắc đến mức tôi không thể chuyển sang thiết bị đầu cuối dựa trên văn bản và tôi đã tăng gấp đôi RAM như bạn. Nếu bạn từng gặp phải tình huống đó khi bạn không thể sử dụng phiên X của mình, bạn phải chuyển sang thiết bị đầu cuối dựa trên văn bản và tiêu diệt các quy trình vi phạm. Nếu thất bại, bạn phải thực hiện khởi động lại cứng. Bout tốt nhất tôi có thể nói với bạn.
Zach Sanchez

1
@Kais macOS cũng trở nên chậm chạp trong các tình huống bộ nhớ thấp. Thực sự không có cách nào để hệ thống quyết định một cách hợp lý bộ nhớ nào cần giữ trong RAM, do đó, việc chuyển đổi giữa các ứng dụng sẽ hoán đổi như điên, đến mức UI trở nên không phản hồi.
Kusalananda

5
ehh, không phải là không có cách nào hiệu quả hơn để giữ cho giao diện người dùng "trình quản lý cửa sổ" phản hồi. Nghiên cứu của MS đã viết toàn bộ hệ điều hành thử nghiệm trên một thiết kế cấm phân trang theo yêu cầu. Bằng chứng về khái niệm: Chạy "trình quản lý cửa sổ" trong Midori, mô phỏng các ứng dụng Linux bao gồm trao đổi. Ở đó, "trình quản lý cửa sổ" sẽ phản hồi ngay cả khi các ứng dụng được hoán đổi. Tối thiểu, nó có thể cho phép bạn giết một số ứng dụng để giải phóng bộ nhớ. Linux không hoàn hảo. Gnome chuyển từ X11 sang Wayland thậm chí còn khiến nó phản ứng kém hơn đáng kể trên các hệ thống quá tải.
sourcejedi

2
Số liệu thống kê ổ cứng có thể quan trọng. Một nguyên nhân có thể gây ra sự không phản hồi là một đĩa bị hỏng, gây ra tồn đọng I / O rất lớn. Nhưng tôi không thấy bất kỳ bằng chứng nào về điều đó xảy ra trong trường hợp này.
200_success

4

Khi tôi đọc tiêu đề, suy nghĩ ngay lập tức của tôi là "không đủ RAM", bởi vì tôi đã tự mình trải nghiệm chính xác vấn đề này trên Linux, hơn 10 phút đập đĩa điên cuồng sau khi mở quá nhiều tab trình duyệt. Tôi đồng ý, nó ảm đạm, và cần cải thiện. Windows xử lý tình huống này tốt hơn nhiều.

Một số gợi ý:

  • Thêm một applet màn hình bộ nhớ vào khay hệ thống của bạn để bạn có thể theo dõi nó.
  • Trong tùy chọn của Firefox, đặt "giới hạn quy trình nội dung" thành "1". Như văn bản bên dưới cài đặt có nội dung: "Các quy trình nội dung bổ sung có thể cải thiện hiệu suất khi sử dụng nhiều tab, nhưng cũng sẽ sử dụng nhiều bộ nhớ hơn".
  • Loại bỏ hoặc thay thế bất kỳ addons trình duyệt đói bộ nhớ. Giữ trình chặn quảng cáo của bạn, vì quảng cáo ăn nhiều bộ nhớ hơn bất kỳ trình chặn nào.
  • Điều tra và có thể loại bỏ bất kỳ chương trình đói bộ nhớ khác.

Tuy nhiên, giải pháp thực sự duy nhất là mua thêm RAM.

Sự phong phú của RAM không chỉ ngăn chặn thảm họa này xảy ra mà còn cho phép hệ thống xây dựng bộ đệm tệp lớn trong RAM, điều mà hệ thống của bạn hiện không thể làm được vì nó chạy quá giới hạn. Một bộ đệm tệp lớn sẽ lấy đi ổ cứng và làm cho hầu hết mọi hành động trên hệ thống đều cảm thấy nhanh hơn. Nó đáng giá.


Câu trả lời tuyệt vời, cảm ơn rất nhiều. Nhưng liên quan đến "Các quy trình nội dung bổ sung có thể cải thiện hiệu suất khi sử dụng nhiều tab, nhưng cũng sẽ sử dụng nhiều bộ nhớ hơn." - Nếu tôi hiểu chính xác, Firefox có thể mở tối đa 8 quy trình cho mỗi Tab, trên mỗi cài đặt mặc định không?
Kais

1
@Kais Tôi nghĩ đó là 1 quá trình trên mỗi tab. Trong mọi trường hợp, nếu bạn đặt giới hạn thành 1, thì đó sẽ là tổng số 1 quy trình cho tất cả các tab, nên sử dụng ít bộ nhớ hơn.
Boann

Hiểu rồi, cảm ơn lần nữa.
Kais

4

Đầu ra htop của bạn cho thấy nhu cầu RAM của bạn cao hơn dung lượng của nó (tổng RAM + SWAP). Vì vậy, việc xem xét đầu tiên rõ ràng để thực hiện là giảm sử dụng RAM hoặc tăng tính khả dụng của RAM.

Lưu ý rằng các phiên bản firefox hiện đại cực kỳ ngốn tài nguyên, do cách các cửa sổ / tab được đưa ra quá trình và không gian bộ nhớ. Ý tưởng là để tránh các tab bị sập khiến toàn bộ trình duyệt phải quỳ xuống. Có đáng giá? Ai có thể nói ... Dù sao, tôi cũng gặp vấn đề tương tự do những điều trên, vì bo mạch chính Pentium 4 của tôi chỉ hỗ trợ 2GB RAM. Để tránh sự cố hết bộ nhớ có thể xảy ra, tôi đã thêm ~ 800M dung lượng trao đổi trên ổ SSD dự phòng, rõ ràng là với ý định sử dụng nó ít nhất có thể. Tôi đã đạt được điều đó bằng cách thay đổi một cài đặt được gọi là swappiness, xác định mức độ háo hức của kernel để hoán đổi các trang bộ nhớ. Một số lệnh hữu ích như sau.

Kiểm tra sự thay đổi hiện tại: cat /proc/sys/vm/swappiness

Điều này cũng có thể cung cấp cho bạn một kết quả khoảng 60, khá cao cho hiệu suất tối đa trên các hệ thống có tải thấp hơn. Đối với bạn, rõ ràng điều này hoạt động phản tác dụng, vì vậy bạn có thể thay đổi cài đặt bằng cách sử dụng lệnh như sysctl vm.swappiness=1để thay đổi cài đặt trong khi hệ thống đang chạy.

Để lưu những thay đổi này, bạn sẽ phải tìm tệp /etc/sysctl.conf. Trong tệp đó, thay đổi giá trị hoặc thêm dòng vm.swappiness=1.

Hãy nhớ rằng, đây không phải là một giải pháp trong trường hợp của bạn, nhưng nên tạo ra một cách giải quyết có thể sử dụng được.

Tín dụng https://askubfox.com/questions/103915/how-do-i-configure-swappiness

nguồn cho câu trả lời ở trên, bao gồm giải thích thêm. Tôi thấy bài viết đó rất hữu ích trong trường hợp của tôi.


Cám ơn phản hồi của bạn. Điều này nghe có vẻ là một khuyến nghị tốt cho cấu hình VM.
Kais

2

Một số thảo luận tuyệt vời về cách gây ra vấn đề, tiếp tục và phát triển. Tôi muốn vượt lên trước các vấn đề như bạn gặp phải bằng cách ném phần cứng vào thiết kế ban đầu của máy tính và / hoặc nâng cấp triển khai hiện có. Bạn có thể,

  • thêm RAM (32GB hoạt động tốt cho nhiều thiết lập)

  • thay thế ổ đĩa cứng của bạn bằng ổ SSD

  • thêm ổ SSD (Solid State Drive) cho ổ đĩa trao đổi

  • tạo phân vùng trao đổi trong RAM (có 32 GB RAM trở lên)

  • nhận được một ổ cứng nhanh hơn

  • di chuyển đến một hệ thống có xử lý nhanh hơn và kiến ​​trúc bus rộng hơn / nhanh hơn.

Một số nâng cấp / thay thế phần cứng này có thể dưới $ 100US. Đây không phải là Linux cụ thể, cũng không phải là triển khai phần mềm chính xác của bạn, nhưng phần cứng bạn đang sử dụng dường như không phù hợp với nhiệm vụ của bạn.


1
Câu trả lời rất hữu ích, cảm ơn vì đã chỉ ra các khuyến nghị thay thế phần cứng.
Kais

1
Tôi hy vọng nó sẽ giúp. Không biết loại máy tính hoặc thiết bị cụ thể, vì vậy đây là các bước chung, để cải thiện khả năng nhất. Bất kỳ hoặc tất cả sẽ giúp giảm bớt sự chậm chạp cụ thể của bạn có khả năng do đập bộ nhớ cache, trao đổi và để đọc / ghi đĩa nhanh hơn và ít hơn nói chung
Chú già Hồ

6
Hầu hết đó là những gợi ý tốt, nhưng về cơ bản, việc trao đổi với RAM về cơ bản là vô dụng trừ khi bạn sử dụng zram hoặc zswap để trao đổi nén với RAM - chúng đáng giá, nhưng việc trao đổi với ramdisk không nén chỉ tạo ra chính xác áp lực RAM khi nó giảm ( thực tế, rất nhiều hơn một chút do chi phí).
cas

Tôi không chắc tại sao mọi người sẽ trao đổi với RAM, ngoại trừ khi nén, có vẻ như đó là một ý tưởng tuyệt vời về khối lượng công việc RAM cao / CPU thấp.
Peter - Tái lập lại

1
@bain: làm thế nào tốt hơn bao giờ hết khi các trang được hoán đổi thành RAM so với vẫn được ánh xạ? Họ vẫn đang sử dụng nhiều trang RAM vật lý trừ khi bạn sử dụng nén. Đó là nơi giá trị. Sự khác biệt duy nhất là ghi sổ nhiều hơn nhưng có thể bảng bảng phần cứng sạch hơn. Đối với bộ nhớ chỉ khởi động mà về cơ bản xử lý bỏ qua unmap, ví dụ: các hàm / dữ liệu chỉ được chạm trong khi khởi động, trao đổi vào đĩa sẽ tốt hơn vì nó không tiêu tốn bất kỳ dung lượng DRAM nào. Đối với các trình nền nền không được sử dụng tương tác, độ trễ không quan trọng để một lần nữa trao đổi đĩa thắng.
Peter Cordes

2

Thông thường, X11 "chỉ" không sử dụng được. Để có một tổ hợp phím từ bàn phím của bạn đến một chương trình và để nó hiển thị bất cứ thứ gì trên màn hình, mã trong một số quy trình khác nhau phải chạy. (Máy chủ X để nhận tổ hợp phím từ kernel, xterm hoặc tương đương để nhận sự kiện và quyết định vẽ một cái gì đó, sau đó gửi tin nhắn đến máy chủ X để vẽ glyph từ phông chữ.)

Chỉ cần vẫy chuột xung quanh một cửa sổ với trình duyệt web hiển thị một trang với một đống tin nhắn Javascript có thể dẫn đến một loạt các thông báo cho một loạt các quy trình, tất cả đều khiến các quy trình đó thức dậy và chạm vào một loạt dữ liệu. Có lẽ bao gồm một loạt các bitmap không nén "được lưu trữ". Vì vậy, điều này rất có khả năng để đuổi thêm nhiều thứ cần sớm.

ctrl + alt + F2 để chuyển sang một bảng điều khiển ảo khác thường cho phép đăng nhập và chạy các lệnh shell chỉ với một vài giây trễ khi có thứ gì đó gây ra sự hoán đổi trao đổi. Chỉ là bash; nhân Linux không thể hoán đổi được và nó có tất cả mã VT và
bàn phím <-> TTY.


Để tránh bị chậm lại khi bạn không thực sự quậy phá, việc giảm "swappiness" có thể giúp ích. ví dụ: tôi đặt /proc/sys/vm/swappinessđiều chỉnh thành 6trên máy tính để bàn của mình với 16GB RAM và phân vùng trao đổi 2GB trên ổ SSD NVMe. Bạn có thể đọc thêm về điều chỉnh độ trễ tương tác (trái ngược với thông lượng của máy chủ); bất kỳ hướng dẫn sẽ đề cập đến điều chỉnh.

Nhưng nếu bạn có bất kỳ trao đổi nào, Linux sẽ sử dụng nó trước khi gọi kẻ giết người OOM. Giữ cho phân vùng trao đổi của bạn nhỏ , chỉ đủ lớn để Linux phát hiện ra những thứ nhảm nhí thực sự thường không được sử dụng trong một thời gian dài. (ví dụ rò rỉ bộ nhớ!)

Tôi đã không có bất kỳ vấn đề với trao đổi là đầy đủ. Linux hiện đại liên quan đến việc có không gian hoán đổi giới hạn tốt. Chromium (mà tôi sử dụng thay vì firefox) đôi khi bị chậm lại với hàng tá tab Stack Overflow mở, nhưng The Great Suspender là một tiện ích bổ sung tuyệt vời để dỡ các tab khi bạn không sử dụng chúng. Tôi nghĩ rằng sẽ tiết kiệm RAM đáng kể cho tôi, mặc dù nó sẽ chỉ dỡ các tab mà bạn chưa nhập bất cứ thứ gì vào hộp văn bản. Nó cũng có thể có sẵn cho Firefox.


Như những người khác đã đề xuất, 16GB RAM thực sự tốt cho việc sử dụng tương tác với Linux. Giá DRAM hiện tại tương đối thấp ; sau khi đi xe đạp khoảng 1,5 năm trước, họ hầu như đã từ chối một lần nữa.


Câu trả lời tuyệt vời, cảm ơn rất nhiều. Nhưng liên quan đến "một loạt các tin tặc Javascript có thể dẫn đến một loạt các thông báo cho một loạt các quy trình, tất cả đều khiến các quy trình đó thức dậy và chạm vào một loạt dữ liệu" - Tôi tự hỏi những quy trình này là gì, chúng có phải là Firefox không quá trình con?
Kais

@Kais: Trình quản lý cửa sổ, trình duyệt web, máy chủ X, có thể nhiều máy khách X khác trong một máy tính để bàn phức tạp hơn. Và bất kỳ quá trình nào khác có cửa sổ chuột của bạn lướt qua (đó là những gì tôi đã nghĩ khi tôi viết câu đó). ví dụ: trong KDE, thanh tác vụ là một tiến trình riêng biệt ( plasma) từ trình kwinquản lý cửa sổ.
Peter Cordes

Tôi sử dụng LXDE, vì vậy trong trường hợp của tôi chỉ có Openbox và máy chủ XOrg là các quá trình sẽ thức dậy? Ngoài ra, các loại tin nhắn được truyền cho họ là gì?
Kais

@Kais: Thông báo giao thức X11 qua ổ cắm tên miền unix. Hãy thử chạy xevđôi khi để xem loại tin nhắn nào bạn có thể nhận được từ việc di chuyển chuột. Cũng cố gắng strace xevđể xem các cuộc gọi hệ thống liên quan đến phía khách hàng.
Peter Cordes

Tôi hiểu rồi, cảm ơn. Khi chạy xevlệnh, tôi chỉ nhận được tin nhắn bằng cách chuyển sang các cửa sổ khác nhau và nhấp vào chúng, nhưng đó không phải là trường hợp khi tôi di chuyển qua chuột.
Kais

-2

Điều gì có thể khiến Linux không phản hồi trong vài phút khi duyệt các trang web nhất định?

Bạn không sử dụng Linux đúng. Điều này trở nên đặc biệt đáng chú ý trên một máy giới hạn tài nguyên. Bạn không cần thêm RAM, cũng không cần bộ xử lý nhanh hơn.

Lý lịch:

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

Để 'khắc phục' vấn đề của bạn:

Để các chương trình không dành cho người dùng một mình, nhưng bắt đầu thay đổi mức độ ưu tiên (mức độ đẹp) của chương trình người dùng của bạn để chúng không gây ra sự cố cho bạn. Chỉnh sửa những gì khởi chạy chương trình của bạn để bao gồm các cấp độ đẹp, thường không phải là vấn đề, đến người phạm tội tồi tệ nhất.

Ví dụ về thế giới thực:

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}

Worst Offerender của bạn sẽ vẫn không phản hồi trong vài phút, nghĩa là bạn sẽ mua một vấn đề hộp tốt hơn, nhưng giờ nó sẽ không khiến toàn bộ HĐH (Linux) của bạn và mọi thứ khác bạn đang chạy cũng không phản hồi.


2
Tôi đã làm việc trong nhiều thập kỷ với Linux với rất nhiều máy chủ và trên máy trạm của riêng tôi (thường trong các thiết lập VM rất hạn chế) và chưa một lần phải khắc phục vấn đề hiệu năng liên quan đến RAM nice -n. "Bạn không cần thêm RAM" - anh ấy chắc chắn cần nhiều RAM hơn; hoặc có thể sử dụng ulimitđể hạn chế những kẻ phạm tội tồi tệ nhất để RAM hiện tại của anh ta đủ trở lại. "Bạn không sử dụng Linux đúng không." là hoàn toàn tắt
AnoE

Và tôi đã làm việc với Linux GUI cài đặt về tài nguyên phần cứng giới hạn cho 22 năm qua và “thoải mái” ing công trình để giải quyết giữ “Linux không phản hồi trong vài phút.”
Michael

Tôi không phủ nhận rằng nó hoạt động; Tôi chỉ nói rằng đưa nó ra làm cách "đúng" để làm việc với Linux có thể không phải là điều tốt nhất.
AnoE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.