Apa yang dapat membuat Linux tidak responsif selama beberapa menit saat menjelajahi situs web tertentu?

28

Saya menggunakan Linux 4.15, dan ini terjadi berulang kali ketika saya menjelajahi Google, Facebook, atau situs web lain yang haus sumber daya - Seluruh OS menjadi tidak responsif, beku, dan tidak berguna. Satu-satunya hal yang saya lihat berfungsi adalah disk (partisi sistem utama diformat sebagai ext4), yang digunakan secara masif (pembatasan I / O).

Saya dipaksa untuk menunggu satu menit atau lebih untuk menghilangkan rasa kembung, kadang-kadang tetap tidak responsif selama dua belas menit, dan karenanya saya merasa frustrasi. Fakta bahwa OS tidak mampu menangani multitasking dengan baik, cenderung mencerminkan perilaku yang benar-benar aneh dan tidak dapat diterima.

Tidak hanya ini terjadi dengan Firefox, tetapi dengan setiap aplikasi javascript-interpreter termasuk Microsoft VSCode atau sudut-cli ( ng servecommand) serta setiap benang sumber daya-lapar lainnya eksekusi - seperti kasus plantuml saat membuat grafik yang sangat besar dari diagram UML yang sangat kompleks.

Hari ini, OS menjadi benar-benar tidak dapat dikelola, setelah meluncurkan perangkat lunak pemulihan data untuk HDD eksternal (lebih dari partisi ext4) yang akhir-akhir ini dicabut dari port USB yang buruk dengan sedikit gerakan.

Saya tidak dapat memberi tahu akar penyebab di balik perilaku kereta seperti itu

Saya memiliki banyak tab yang dibuka di browser, dan penggunaan partisi OS 94% sesuai dfoutput:

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

Sebagai perangkat keras, saya menggunakan:

  1. Intel Core i3 v2348M sesuai 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. (Lihat htopoutput di bawah).

  3. Kecepatan bus mainboard 99,83 MHz
  4. HDD internal 500 GB - Ini adalah laporan SMART dari sistem operasi:

    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.
    

Ini adalah hasil penggunaan sumber daya per 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

Itu adalah hasil statistik VM juga, yang dihasilkan oleh perintah vmstat 5.

AFAIK, bloatware seharusnya tidak membuat OS tidak responsif, jadi saya tidak akan mempertimbangkan atau bahkan menerima bahwa bloatware adalah akar penyebab masalah - karena pekerjaan OS mengisolasi proses dan memastikan multitasking.

Saya tidak tahu apakah masalah ini khusus untuk OS, khusus untuk perangkat keras, atau khusus untuk konfigurasi.

Ada ide?

Kais
sumber
4
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan . Pastikan untuk memperbarui Pertanyaan sesuai kebutuhan untuk klarifikasi apa pun yang dihasilkan dari komentar / obrolan. Terima kasih!
Jeff Schaller
3
Saya menduga sistem Anda banyak bertukar; dapatkah Anda menjalankannya vmstat 5saat sistem Anda bertingkah? Tidak apa-apa untuk memulai vmstat sebelumnya dan memposting baris yang dicetak selama pembekuan. Saya mencari kolom sidan khusus so, yang menunjukkan berapa banyak sistem sebenarnya bertukar. Juga, dapatkah Anda memposting output top, diurutkan berdasarkan penggunaan memori (shift-M)? (atau apa pun yang setara dengan mode htop)
marcelm
1
Ketika sistem file hampir penuh itu bisa menjadi sangat lambat. Saya tidak yakin apakah ini kemungkinan terjadi dengan ext4.
Tidak ada yang
1
@Kais Cobalah keduanya dan lihat apa yang berhasil? Swap saya mengisi hingga setengah dari apa yang saya siapkan dan itu tidak menyebabkan saya macet. Apakah seseorang mengalami pelambatan atau tidak dari penggunaan swap juga tergantung pada pola penggunaan yang saya pikir, sehingga pengalaman kami mungkin berbeda.
JoL
2
Coba nonaktifkan swap sepenuhnya - yang akan mengkonfirmasi atau menghilangkan hard disk sebagai sumber masalahnya. Maksud bertukar adalah untuk meletakkan halaman yang tidak digunakan pada disk, tetapi jika sebagian besar halaman benar-benar digunakan, maka bertukar tidak akan membantu. Jika beban kerja Anda yang khas membutuhkan halaman residen 10GB, maka mesin 8GB akan kesulitan. Jawaban untuk kelelahan sumber daya adalah dengan menurunkan beban kerja atau menambah sumber daya (dalam hal ini, coba krom atau tambahkan lebih banyak memori fisik).
bain

Jawaban:

27

Apa yang bisa membuat Linux tidak responsif?

RAM yang tersedia terlalu banyak, yang menyebabkan banyak pertukaran, pasti bisa melakukan ini. Ingatlah bahwa I / O akses acak pada HDD mekanis Anda mengharuskan untuk memindahkan kepala baca / tulis, yang hanya dapat dilakukan sekitar 100 kali per detik.

Ini biasa bagi Linux untuk benar-benar keluar makan siang, jika Anda overcommit RAM "terlalu banyak". Saya juga punya spinny disk dan 8GB RAM. Saya memiliki masalah dengan beberapa perangkat lunak dengan kebocoran memori. Yaitu penggunaan memori mereka terus tumbuh dari waktu ke waktu dan tidak pernah menyusut, jadi satu-satunya cara untuk mengendalikannya adalah dengan menghentikan perangkat lunak dan kemudian restart. Berdasarkan pengalaman yang saya miliki selama ini, saya tidak terlalu terkejut mendengar penundaan selama sepuluh menit, jika Anda menghasilkan 3GB + swap.

Anda tidak perlu melihat ini dalam semua kasus di mana Anda memiliki lebih dari 3GB swap. Teori mengatakan konsep kuncinya adalah meronta - ronta . Di sisi lain, jika Anda mencoba untuk beralih di antara dua set kerja yang berbeda, dan itu membutuhkan swapping 3GB masuk dan keluar, pada 100MB / s itu akan memakan waktu setidaknya 60 detik bahkan jika pola I / O dapat dioptimalkan dengan sempurna. Dalam praktiknya, pola I / O akan jauh dari optimal.

Setelah kesulitan yang saya alami dengan ini, saya memformat ulang ruang swap saya menjadi 2GB (beberapa kali lebih kecil dari sebelumnya), sehingga sistem tidak akan dapat menukar secara mendalam. Anda dapat melakukan ini bahkan tanpa perlu mengubah ukuran partisi, karena mkswapmengambil parameter ukuran opsional.

Keseimbangan yang kasar adalah antara kehabisan memori dan proses yang terbunuh, dan memiliki sistem yang menggantung begitu lama sehingga Anda menyerah dan reboot lagi. Saya tidak tahu apakah partisi swap 4GB terlalu besar; mungkin tergantung apa yang Anda lakukan. Yang penting adalah untuk berhati-hati ketika disk mulai berputar, periksa penggunaan memori Anda, dan merespons sesuai.

Memeriksa penggunaan memori aplikasi multi-proses sulit. Untuk melihat penggunaan memori per-proses tanpa penghitungan ganda memori bersama, Anda dapat menggunakan sudo atop -R, tekan Mdan m, dan lihat di kolom PSIZE. Anda juga bisa menggunakan smem. smem -t -P firefoxakan menampilkan PSS dari semua proses firefox Anda, diikuti oleh garis dengan total PSS. Ini adalah pendekatan yang benar untuk mengukur penggunaan memori total dari browser berbasis Firefox atau Chrome. (Meskipun ada juga fitur khusus browser untuk menunjukkan penggunaan memori, yang akan menampilkan tab tersendiri).

sourcejedi
sumber
1
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Jeff Schaller
Mungkin patut dipertimbangkan penggunaan ulimituntuk mencoba mengendalikan penggunaan proses (itu rumit dengan aplikasi multi-proses, tetapi mungkin bisa membantu).
Toby Speight
2
@TobySpeight jika Anda ingin membatasi penggunaan memori aplikasi maka Anda perlu menggunakan cgroup. ulimitbenar-benar tidak membantu.
sourcejedi
Ya, itu kemungkinan pilihan yang lebih baik. Ini benar-benar layak disebutkan dalam jawabannya.
Toby Speight
2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- atau, jika Anda menggunakan GUI, buat crontab yang menjalankan skrip sederhana (setiap menit atau lebih) yang memeriksa berapa banyak RAM yang tersisa, memperingatkan Anda tentang itu. Saya membuat sendiri untuk Linux Mint, dan saya belajar sedikit dari itu. Ini adalah sesuatu yang dapat Anda coba dan mainkan.
Ismael Miguel
5

AFAIK, bloatware seharusnya tidak membuat OS tidak responsif, jadi saya tidak akan mempertimbangkan atau bahkan menerima bahwa bloatware adalah akar penyebab masalah.

Anda tidak akan menyukai ini, tetapi saya pikir bloatware adalah masalah Anda (walaupun saya tidak yakin apakah itu memori atau disk yang merupakan masalahnya). Sayangnya, kernel Linux buruk dalam menangani situasi tekanan memori tinggi, dan diketahui pada dasarnya membutuhkan reboot setelah kehabisan memori. Ada tiga hal yang membuat saya percaya bahwa masalah Anda adalah kehabisan sumber daya:

  1. Ruang disk Anda di root (/) dan DATA hampir penuh. Saya tidak yakin untuk apa Anda menggunakan DATA, tetapi saya pernah mengalami masalah sebelum mengubah ukuran partisi root saya terlalu kecil dan sistem saya menjadi tidak dapat dioperasikan.
  2. Anda memiliki tekanan memori tinggi, artinya RAM Anda hampir penuh. Ketika RAM mulai penuh Anda akan mulai mendapatkan kesalahan halaman. Kesalahan halaman terjadi ketika kernel tidak dapat mengalokasikan cukup memori untuk suatu proses dan sebagai gantinya harus menggunakan beberapa sistem jauh lebih lambat ruang swap. Ini membawa kita ke pengamatan terakhir kami:
  3. Ruang swap Anda hampir penuh. Jelas ada beberapa tekanan memori tinggi pada sistem Anda karena RAM dan swap hampir penuh.

Pada dasarnya, kombinasikan ketiga hal ini dan sistem Anda tidak memiliki sumber daya yang cukup untuk melakukan banyak hal. Adapun sangat disayangkan betapa buruknya Linux menangani situasi dengan memori rendah (dibandingkan dengan, katakanlah, kernel NT di Windows) tetapi tampaknya seperti itu. Anda dapat menemukan lebih banyak diskusi di utas Reddit ini dan milis tertautnya.

Adapun cara memperbaiki situasi Anda, saya akan mengatakan meningkatkan ukuran swap Anda adalah ide yang baik, tetapi karena Anda kekurangan ruang disk yang akan menjadi masalah. Kecuali jika server Minecraft Anda memiliki banyak orang, saya pikir akan lebih aman untuk mengurangi memorinya menjadi sekitar 1024m (saya pribadi menggunakan 1024m dengan sekitar 10 orang dan berfungsi dengan baik). Saya juga akan menggunakan keran atau kertas untuk server Minecraft Anda karena mereka cenderung lebih berkinerja.

Semoga berhasil!

Mengejar
sumber
7
Sudah jelas memori itu masalahnya, bukan disk. Memang benar bahwa Linux buruk di bawah tekanan memori tinggi. Tetapi tidak benar bahwa reboot diperlukan. Jika Anda berhasil mengosongkan sebagian memori, Linux akan menjadi sama responsifnya seperti sebelum tekanan memori melampaui kapasitas yang tersedia.
Gilles 'SO- berhenti menjadi jahat'
1
@Kais saya berkata "ini membawa kita ke pengamatan terakhir kami" sebagai sebuah segue karena saya berbicara tentang ruang swap dan akan terus membicarakannya di poin 3. Tentang Minecraft, sepertinya Anda menjalankan server Minecraft, dan telah mengalokasikan RAM 3G untuk itu. Saya hanya mengatakan bahwa kecuali Anda memiliki banyak orang yang memainkannya secara bersamaan, Anda mungkin tidak membutuhkan banyak RAM. Saya mengatakan "mereka cenderung lebih berkinerja" ketika berbicara tentang kertas dan keran, yang merupakan server Minecraft alternatif yang menampilkan kinerja yang lebih baik daripada vanilla MC.
Mengejar
2
Saya pernah mendengar bahwa umumnya menggunakan swap sama sekali adalah ide yang buruk? Paling tidak dalam lingkungan server, ketika pembekuan selama 12 menit tidak dapat diterima?
9ilsdx 9rvj 0lo
2
@ Kais, dalam pengalaman saya, Windows bahkan lebih buruk dengan program-program non-GUI, tetapi itu akan menangguhkan program-program GUI non-foreground jika tekanan memori tinggi, yang memecahkan masalah untuk desktop, dengan asumsi bahwa aplikasi desktop tidak memiliki latar belakang tugas.
Simon Richter
2
Vanilla Minecraft mungkin; tapi modpack besar dengan mudah mencapai 3 GiB sebelum seorang pemain bahkan bergabung :)
Luaan
4

Apa output dari free -m? Jumlah RAM yang Anda miliki tidak ada gunanya jika kami tidak tahu berapa banyak yang Anda gunakan. Itu dan saya tertarik untuk mengetahui berapa banyak ruang swap yang digunakan.

Saya pikir Anda sudah menjawab pertanyaan Anda sendiri. Membuka "banyak tab" terbuka di peramban Anda pasti dapat memperlambat sistem Anda jika Anda tidak pernah menutupnya, karena mereka akan terus mengkonsumsi memori tanpa memperhatikan; ketika sistem Anda macet, berapa banyak yang Anda buka sekaligus?

Ini juga masuk akal jika sistem Anda membeku dari tugas-tugas intensif memori lain seperti "menghasilkan grafik yang sangat besar dari diagram UML yang sangat kompleks". Itu benar-benar akan memperlambat sistem Anda karena menghasilkan grafik, jadi itu tidak mengejutkan.

Kedengarannya seperti inilah seharusnya sistem Anda berperilaku. Entah itu atau aku kehilangan sesuatu di sini.

By the way, statistik HDD tidak masalah ketika datang ke sistem Anda menjadi tidak responsif karena kekurangan memori hampir selalu menjadi penyebabnya.

Zach Sanchez
sumber
1
"Itu benar-benar akan memperlambat sistem Anda" - Ya ini diharapkan, tetapi menyebabkan sesi X yang tidak terkendali tidak diharapkan (yaitu hasil dari sistem yang dibekukan), di mana saya tidak dapat melihat kursor mouse bergerak.
Kais
1
Sebenarnya itu yang diharapkan, perilaku yang Anda gambarkan adalah persis apa yang terjadi ketika saya menggunakan terlalu banyak RAM pada sistem saya. Saya bahkan sudah menyumbat sistem saya hingga saya tidak bisa beralih ke terminal berbasis teks, dan saya punya RAM dua kali lipat lebih banyak. Jika Anda pernah mengalami situasi seperti itu di mana Anda tidak dapat menggunakan sesi X Anda, Anda harus beralih ke terminal berbasis teks dan membunuh proses yang menyinggung. Jika gagal, Anda harus melakukan boot ulang keras. Tentang yang terbaik yang bisa saya katakan.
Zach Sanchez
1
@Kais macOS juga menjadi lamban dalam situasi memori rendah. Benar-benar tidak ada cara bagi sistem untuk secara masuk akal memutuskan memori apa yang benar-benar perlu disimpan dalam RAM, sehingga beralih antar aplikasi akan bertukar masuk dan keluar seperti orang gila, ke titik di mana UI menjadi tidak responsif.
Kusalananda
5
ehh, bukan berarti tidak ada cara yang lebih efektif untuk membuat UI "window manager" responsif. Penelitian MS menulis keseluruhan OS eksperimental pada desain yang melarang permintaan-paging. Bukti konsep: Jalankan "window manager" di Midori, meniru aplikasi Linux termasuk swap. Di sana Anda pergi, "manajer jendela" akan tetap responsif bahkan jika aplikasi bertukar. Minimal, ini bisa membuat Anda dapat mematikan beberapa aplikasi untuk melepaskan memori dengan andal. Linux tidak sempurna. Peralihan Gnome dari X11 ke Wayland bahkan membuatnya jauh lebih buruk sebagai responsif terhadap sistem yang kelebihan beban.
sourcejedi
2
Statistik HDD bisa jadi masalah. Salah satu kemungkinan penyebab tidak merespons adalah disk yang gagal, yang menyebabkan backlog I / O yang sangat besar. Tetapi saya tidak melihat bukti apa pun yang terjadi dalam kasus ini.
200_success
4

Ketika saya membaca judulnya, pikiran saya adalah "tidak cukup RAM", karena saya sendiri pernah mengalami masalah ini di Linux, 10+ menit hard disk panik setelah membuka terlalu banyak tab browser. Saya setuju, ini suram, dan perlu diperbaiki. Windows menangani situasi ini jauh lebih baik.

Beberapa saran:

  • Tambahkan applet monitor memori ke baki sistem Anda sehingga Anda dapat mengawasinya.
  • Di preferensi Firefox, setel "batas proses konten" menjadi "1". Seperti teks di bawah pengaturan mengatakan: "Proses konten tambahan dapat meningkatkan kinerja saat menggunakan banyak tab, tetapi juga akan menggunakan lebih banyak memori."
  • Hapus atau ganti semua add-on browser yang haus-memori. Simpan pemblokir iklan Anda, karena iklan memakan lebih banyak memori daripada pemblokir lainnya.
  • Selidiki dan mungkin hapus semua program yang haus memori.

Namun, satu-satunya solusi sebenarnya adalah membeli lebih banyak RAM.

RAM yang berlimpah tidak hanya akan mencegah malapetaka ini terjadi, tetapi juga akan memungkinkan sistem untuk membangun cache file besar dalam RAM, yang saat ini tidak dapat dilakukan oleh sistem Anda karena berjalan sangat dekat dengan batas. Cache file yang besar akan menghilangkan HDD dan membuat hampir setiap tindakan pada sistem terasa lebih cepat secara umum. Itu sangat berharga.

Boann
sumber
Jawaban yang bagus, terima kasih banyak. Tetapi mengenai "Proses konten tambahan dapat meningkatkan kinerja saat menggunakan banyak tab, tetapi juga akan menggunakan lebih banyak memori." - Jika saya mengerti dengan benar, apakah Firefox dapat membuka hingga 8 proses per Tab, per pengaturan default?
Kais
1
@ Kim Saya pikir ini 1 proses per tab. Bagaimanapun, jika Anda menetapkan batas ke 1, itu akan menjadi total 1 proses untuk semua tab, yang seharusnya menggunakan lebih sedikit memori.
Boann
Dipahami, terima kasih lagi.
Kais
4

Output htop Anda menunjukkan bahwa kebutuhan Anda akan RAM lebih tinggi dari kapasitasnya (total RAM + SWAP). Jadi pertimbangan pertama yang jelas untuk dibuat adalah untuk mengurangi penggunaan RAM atau meningkatkan ketersediaan RAM.

Perhatikan bahwa versi firefox modern sangat haus sumber daya, karena cara windows / tab diberikan proses dan ruang memori. Idenya adalah untuk menghindari tab tabrakan yang membuat seluruh browser bertekuk lutut. Apakah ini harga yang layak? Siapa yang tahu ... Pokoknya, saya punya masalah yang sama karena hal di atas, karena mainboard Pentium 4 saya hanya mendukung 2GB RAM. Untuk menghindari kemungkinan crash kehabisan memori, saya menambahkan ~ 800M ruang swap pada SSD cadangan, jelas dengan niat untuk menggunakannya sesedikit mungkin. Saya telah mencapai itu dengan mengubah pengaturan yang dikenal sebagai swappiness, yang menentukan seberapa bersemangat kernel untuk menukar halaman memori. Beberapa perintah yang bermanfaat sebagai berikut.

Periksa swappiness saat ini: cat /proc/sys/vm/swappiness

Ini mungkin memberi Anda hasil sekitar 60, yang cukup tinggi untuk kinerja maksimum pada sistem dengan beban lebih rendah. Untuk Anda, jelas ini berfungsi kontra-produktif, sehingga Anda dapat mengubah pengaturan menggunakan perintah seperti sysctl vm.swappiness=1untuk mengubah pengaturan saat sistem sedang berjalan.

Untuk menyimpan perubahan ini, Anda harus mencari file /etc/sysctl.conf. Dalam file itu, ubah nilainya atau tambahkan baris vm.swappiness=1.

Pikiran, ini bukan solusi dalam kasus Anda, tetapi harus membuat solusi yang dapat digunakan.

Kredit /ubuntu/103915/how-do-i-configure-swappiness

sumber untuk jawaban di atas, termasuk penjelasan lebih lanjut. Saya menemukan posting itu sangat membantu dalam kasus saya.

Pak Donutz
sumber
Terimakasih atas tanggapan Anda. Ini kedengarannya menjadi rekomendasi yang baik untuk konfigurasi VM.
Kais
2

Beberapa diskusi yang sangat baik tentang bagaimana masalah disebabkan, berlanjut dan tumbuh Saya ingin maju dari masalah seperti yang Anda alami dengan melemparkan perangkat keras pada desain komputer awal, dan / atau meningkatkan implementasi yang ada. Bisakah kamu,

  • tambah RAM (32GB berfungsi dengan baik untuk banyak pengaturan)

  • ganti hard disk drive Anda dengan SSD

  • tambahkan SSD (Solid State Drive) untuk swap drive

  • buat partisi swap dalam RAM (dengan 32 GB atau lebih RAM)

  • dapatkan HDD yang lebih cepat

  • pindah ke sistem dengan pemrosesan yang lebih cepat dan arsitektur bus yang lebih luas / lebih cepat.

Beberapa dari upgrade / penggantian perangkat keras ini bisa berada di bawah $ 100US. Ini tidak spesifik untuk Linux, atau implementasi perangkat lunak Anda, tetapi perangkat keras yang Anda gunakan tampaknya tidak memadai untuk tugas Anda.

Paman Tua Ho
sumber
1
Jawaban yang sangat berguna, terima kasih telah menunjukkan rekomendasi penggantian perangkat keras.
Kais
1
Saya harap ini membantu. Tidak tahu apa jenis komputer atau peralatan khusus, jadi ini adalah langkah-langkah umum, dalam urutan peningkatan yang paling mungkin. Setiap atau semua akan membantu perlambatan spesifik Anda yang mungkin disebabkan meronta-ronta cache, swap dan untuk disk lebih cepat dan lebih sedikit membaca / menulis secara umum
Old Paman Ho
6
Sebagian besar dari mereka adalah saran yang bagus, tetapi bertukar ke RAM pada dasarnya tidak berguna kecuali jika Anda menggunakan zram atau zswap untuk bertukar kompresi ke RAM - mereka bermanfaat, tetapi bertukar ke ramdisk yang tidak terkompresi hanya menciptakan tekanan RAM yang persis sama dengan mengurangi ( sebenarnya, sedikit lebih karena overhead).
cas
Saya tidak yakin mengapa ada orang yang menukar ke RAM, kecuali saat mengompresi yang sepertinya ide bagus pada beban kerja RAM tinggi / rendah-CPU.
Peter - Reinstate Monica
1
@ Bain: bagaimana bisa lebih baik memiliki halaman yang ditukar dengan RAM vs masih dipetakan? Mereka masih menggunakan banyak halaman RAM fisik kecuali Anda menggunakan kompresi. Di situlah nilainya. Satu-satunya perbedaan adalah lebih banyak pembukuan tetapi mungkin tabel perangkat keras lebih bersih. Untuk memori khusus startup yang pada dasarnya mengabaikan proses unmap, mis. Fungsi / data yang hanya disentuh saat startup, swap ke disk lebih baik karena tidak mengkonsumsi ruang DRAM. Untuk daemon latar belakang yang tidak digunakan secara interaktif, latensi tidak penting sehingga disk swap menang.
Peter Cordes
2

Biasanya "hanya" X11 yang menjadi tidak dapat digunakan. Untuk mendapatkan penekanan tombol dari keyboard Anda ke suatu program, dan menampilkannya di layar, kode dalam beberapa proses berbeda harus dijalankan. (X server untuk mendapatkan penekanan tombol dari kernel, xterm atau yang setara untuk mendapatkan event dan memutuskan untuk menggambar sesuatu, kemudian mengirim pesan ke server X untuk menggambar mesin terbang dari font.)

Hanya melambaikan mouse Anda di atas jendela dengan browser web yang menunjukkan halaman dengan sekelompok omong kosong Javascript dapat menghasilkan banyak pesan untuk sekelompok proses, yang semuanya menyebabkan proses untuk bangun dan menyentuh banyak data. Agaknya termasuk banyak "cache" bitmap yang tidak terkompresi. Jadi ini sangat mungkin untuk mengusir lebih banyak hal yang segera dibutuhkan.

ctrl + alt + F2 untuk beralih ke konsol virtual lain biasanya memungkinkan untuk masuk dan menjalankan perintah shell dengan latensi hanya beberapa detik ketika ada sesuatu yang menyebabkan swap meronta-ronta. Itu hanya bash; kernel Linux tidak dapat ditukar dan memiliki semua VT dan
keyboard <-> kode TTY.


Untuk menghindari perlambatan saat Anda tidak benar-benar meronta-ronta, mengurangi "swappiness" dapat membantu. misalnya saya mengatur /proc/sys/vm/swappinesstunable ke 6desktop saya dengan 16GB RAM dan partisi swap 2GB pada NVMe SSD. Anda dapat membaca lebih lanjut tentang menyetel latensi interaktif (sebagai lawan dari throughput server); setiap panduan akan menyebutkan merdu itu.

Tetapi jika Anda memiliki swap sama sekali, Linux akan menggunakannya sebelum memanggil pembunuh OOM. Pertahankan partisi swap Anda kecil , cukup besar untuk Linux untuk keluar dari omong kosong yang benar-benar basi yang biasanya tidak digunakan untuk waktu yang lama. (mis. memori bocor!)

Saya belum punya masalah dengan swap yang penuh. Linux modern berurusan dengan memiliki ruang swap terbatas. Chromium (yang saya gunakan sebagai ganti firefox) terkadang menjadi lamban dengan lusinan tab Stack Overflow terbuka, tetapi The Great Suspender adalah tambahan yang bagus untuk membongkar tab saat Anda tidak menggunakannya. Saya pikir itu menghemat RAM yang signifikan bagi saya, meskipun itu hanya akan membongkar tab di mana Anda belum mengetik apa pun di kotak teks. Mungkin juga tersedia untuk Firefox.


Seperti yang lain telah menyarankan, 16GB RAM sangat bagus untuk penggunaan interaktif dengan Linux. Harga DRAM relatif rendah saat ini ; setelah melonjak sekitar 1,5 tahun yang lalu, mereka sebagian besar menolak lagi.

Peter Cordes
sumber
Jawaban yang bagus, terima kasih banyak. Tetapi mengenai "sekelompok omong kosong Javascript dapat menghasilkan banyak pesan untuk banyak proses, yang semuanya menyebabkan proses tersebut untuk bangun dan menyentuh banyak data" - Saya bertanya-tanya apa proses ini, apakah mereka Firefox proses anak?
Kais
@Ais: Pengelola jendela, peramban web, server X, mungkin berbagai klien X lain di desktop yang lebih rumit. Dan setiap proses lain yang jendelanya mouse Anda (yang saya pikirkan ketika saya menulis kalimat itu). misal di KDE, taskbar adalah proses terpisah ( plasma) dari kwinwindow manager.
Peter Cordes
Saya menggunakan LXDE, jadi dalam kasus saya hanya Openbox dan server XOrg yang merupakan proses yang bisa bangun? Juga, apa jenis pesan yang diteruskan kepada mereka?
Kais
@Ais: pesan protokol X11 melalui soket unix-domain. Coba jalankan xevkapan-kapan untuk melihat pesan seperti apa yang bisa Anda dapatkan dari menggerakkan mouse. Coba juga strace xevuntuk melihat panggilan sistem yang melibatkan sisi klien.
Peter Cordes
Begitu ya, terima kasih. Saat menjalankan xevperintah, saya mendapat pesan hanya dengan beralih ke jendela yang berbeda dan mengkliknya, tetapi tidak demikian halnya ketika saya hanya memindahkan mouse.
Kais
-2

Apa yang dapat membuat Linux tidak responsif selama beberapa menit saat menjelajahi situs web tertentu?

Anda tidak menggunakan Linux dengan benar. Yang menjadi sangat nyata pada mesin sumber daya terbatas. Anda tidak perlu lebih banyak RAM, atau prosesor yang lebih cepat.

Latar Belakang:

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

Untuk 'memperbaiki' masalah Anda:

Biarkan program non-pengguna sendirian, tetapi mulai mengubah prioritas (level bagus) dari program pengguna Anda sehingga mereka tidak menyebabkan Anda masalah. Edit apa yang meluncurkan program Anda untuk memasukkan level yang bagus, dari yang biasanya tidak menjadi masalah, ke pelaku terburuk.

Contoh Dunia Nyata:

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}

WorstOffender Anda masih akan menjadi tidak responsif selama beberapa menit, itu benar-benar masalah membeli kotak yang lebih baik, tetapi sekarang tidak akan menyebabkan seluruh OS (Linux) Anda dan segala sesuatu yang Anda jalankan juga menjadi tidak responsif.

Michael
sumber
2
Saya telah bekerja selama beberapa dekade dengan Linux baik dengan banyak server dan pada workstation saya sendiri (sering dalam setup VM sangat terbatas), dan belum pernah harus memperbaiki masalah kinerja terkait RAM dengan nice -n. "Anda tidak perlu lebih banyak RAM" - dia tentu saja membutuhkan lebih banyak RAM; atau bisa digunakan ulimituntuk membatasi pelanggar terburuk sehingga RAM yang ada sudah mencukupi lagi. "Kamu tidak menggunakan Linux dengan benar." benar-benar mati.
AnoE
Dan saya telah bekerja dengan Linux GUI menginstal pada sumber daya perangkat keras terbatas selama 22 tahun terakhir dan "bagus" bekerja untuk memecahkan menjaga "Linux tidak responsif selama beberapa menit."
Michael
Saya tidak menyangkal bahwa itu berhasil; Saya hanya mengatakan bahwa mengedepankannya sebagai cara "benar" untuk bekerja dengan Linux mungkin bukan yang terbaik.
AnoE