浏览某些网站时,几分钟内Linux可能无响应吗?


28

我使用的是Linux 4.15,当我浏览Google,Facebook或任何其他资源匮乏的网站时,这种情况经常发生在我身上-整个操作系统变得无响应,冻结且无用。我唯一能正常工作的是磁盘(主系统分区格式化为ext4),该磁盘已大量使用(I / O节流)。

我不得不等待一分钟或更长时间才能摆脱肿胀,有时它会在十二分钟内保持无反应,因此我感到沮丧。操作系统无法很好地处理多任务,这一事实倾向于反映出一种绝对怪异和不可接受的行为。

不仅发生这种情况与Firefox,但与任何的JavaScript解释器应用程序,包括微软VSCode角-CLIng serve命令),以及执行任何其他渴求资源的线程-例如的情况下plantuml生成从一个非常大的图形时非常复杂的UML图。

如今,在为外部硬盘(通过ext4分区)启动数据恢复软件后,操作系统几乎变得无法管理。

我无法说出此类错误行为背后的根本原因

我在浏览器中打开了许多选项卡,根据df输出,操作系统分区的使用率为94%:

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

作为硬件,我正在使用:

  1. 符合以下条件的Intel Core i3 v2348M 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的RAM。(请参见htop下面的输出)。

  3. 主板总线速度为99.83 MHz
  4. 500 GB内部硬盘-这是来自操作系统的SMART报告:

    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.
    

这些是每个使用资源的结果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

这些也是该命令生成的VM统计信息的结果vmstat 5

AFAIK,bloatware不应使OS无响应,所以我不会考虑甚至接受bloatware是问题的根本原因-因为OS工作是隔离进程并确保多任务。

我不知道此问题是特定于操作系统,特定于硬件还是特定于配置。

有任何想法吗?


4
评论不作进一步讨论;此对话已转移至聊天。请确保根据需要更新问题,以对评论/聊天产生的任何澄清。谢谢!
杰夫·谢勒

3
我怀疑您的系统交换过多;vmstat 5系统运行时可以运行吗?可以预先启动vmstat并发布冻结期间打印的行。我正在专门寻找siand so列,它们指示系统实际交换了多少。另外,您是否可以发布的输出(top按内存使用情况排序)(shift-M)?(或任何等效的htop模式)
marcelm

1
当文件系统快满时,它可能会变得很慢。我不确定ext4是否可能是这种情况。
没人

1
@Kais尝试两者,看看有什么用?我的交换最多可以填满我准备的一半,并且不会导致冻结。我认为交换使用是否会减慢速度,还取决于我认为的使用模式,因此我们的经验可能会有所不同。
JoL

2
尝试完全禁用交换-这将确认或消除磁盘跳动是问题的根源。交换的重点是将未使用的页面放在磁盘上,但是如果大多数页面确实在使用中,那么交换将无济于事。如果您的典型工作量需要10GB的常驻页面,那么一台8GB的计算机将很困难。资源耗尽的答案是降低工作负载或增加资源(在这种情况下,请尝试使用chrome或添加更多的物理内存)。
贝恩

Answers:


27

什么会使Linux如此无响应?

过量使用可用RAM(这会导致大量交换)绝对可以做到这一点。请记住,机械HDD上的随机访问I / O需要移动一个读/写头,每秒只能进行约100次寻道。

如果您过多地使用RAM,Linux通常会完全不吃午餐。我也有一个硬盘和8GB RAM。我遇到了一些内存泄漏的软件问题。也就是说,它们的内存使用量会随着时间的推移不断增长,并且从未减少,因此控制它的唯一方法是停止软件然后重新启动它。根据我在此期间的经验,如果您要生成3GB +的交换,听到十分钟的延迟我并不感到惊讶。

在交换空间超过3GB的情况下,您不一定会看到此情况。理论上说,关键概念正在动摇。另一方面,如果您要在两个不同的工作集之间进行切换,并且需要进出3GB的交换空间,那么即使可以完美地优化I / O模式,也要以100MB / s的速度交换至少需要60秒。实际上,I / O模式将远非最佳。

在遇到这个困难之后,我将交换空间重新格式化为2GB(比以前小了几倍),因此系统将无法进行深度交换。您甚至可以在不改变分区大小的情况下执行此操作,因为mkswap它带有可选的size参数。

大致的平衡是在内存不足和进程被杀死之间,以及系统挂起很长时间以至于您无论如何都放弃并重新引导之间。我不知道4GB交换分区是否太大;这可能取决于您在做什么。重要的是要注意磁盘何时开始搅动,检查内存使用情况并做出相应的响应。

检查多进程应用程序的内存使用情况很困难。要查看每个进程的内存使用情况而不重复计算共享内存,可以使用sudo atop -R,按Mm,然后在PSIZE列中查找。您也可以使用smemsmem -t -P firefox将显示所有firefox过程的PSS,然后显示总PSS的一行。这是衡量基于Firefox或Chrome浏览器的总内存使用情况的正确方法。(尽管还有一些用于显示内存使用情况的特定于浏览器的功能,这些功能将显示各个选项卡)。


1
评论不作进一步讨论;此对话已转移至聊天
杰夫·谢勒

可能值得考虑使用ulimit尝试来控制进程的使用(对于多进程应用程序来说这很棘手,但可能会有所帮助)。
Toby Speight

2
@TobySpeight如果要限制应用程序的内存使用,则需要使用cgroups。ulimit真的没有帮助。
sourcejedi

是的,这可能是一个更好的选择。无论如何,在答案中确实值得一提。
Toby Speight

2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<-,或者,如果您使用的是GUI,请创建一个crontab,该crontab运行一个简单的脚本(每分钟左右一次),该脚本检查您剩余了多少可用RAM,并向您发出警告。我为Linux Mint开发了自己的产品,并且从中学到了很多。您可以尝试使用它。
Ismael Miguel

5

AFAIK,bloatware不应使操作系统无响应,所以我不会考虑甚至接受bloatware是问题的根本原因

您不会喜欢这样,但是我认为bloatware 您的问题(尽管我不确定是问题是内存还是磁盘)。不幸的是,Linux内核在处理高内存压力的情况下非常糟糕,并且众所周知,一旦内存耗尽,就基本上需要重新启动。有三件事使我相信您的问题是资源枯竭:

  1. 根(/)和DATA上的磁盘空间几乎已满。我不确定您要使用DATA做什么,但是在调整根分区的大小太小而系统无法运行之前,我遇到了问题。
  2. 您的内存压力很大,这意味着您的RAM几乎已满。当RAM开始变满时,您将开始出现页面错误。当内核无法为进程分配足够的内存而必须使用某些系统的交换空间慢得多时,就会发生页面错误。这导致我们最后的观察:
  3. 您的交换空间几乎已满。显然,由于RAM和交换空间都快满了,因此系统上存在很大的内存压力。

基本上,将这三者放在一起,您的系统没有足够的资源来做任何事情。至于不幸的是,Linux处理低内存情况的能力很差(例如,与Windows中的NT内核相比),但是事实就是如此。您可以在此Reddit主题及其链接的邮件列表中找到更多讨论。

至于如何解决您的情况,我会说增加交换大小是一个好主意,但是由于磁盘空间不足,这将是一个问题。除非您的Minecraft服务器有很多人,否则我认为将其内存减少到1024m左右是安全的(我个人大约有10个人使用1024m,它可以正常工作)。我也会在您的Minecraft服务器上使用插销或纸张,因为它们往往性能更高。

祝好运!


7
问题显然是内存,而不是磁盘。确实,Linux在高内存压力下性能很差。但是,并非必须重启。如果您设法释放一些内存,Linux将变得与内存压力超出可用容量之前一样敏感。
吉尔斯(Gilles)'别这样

1
@Kais我说“这将导致我们最后的观察”,因为我在谈论交换空间,并将在第3点继续讨论。关于Minecraft,看起来您正在运行Minecraft服务器,并已分配3G的RAM来了。我只是说,除非同时有很多人在玩,否则可能不需要那么多RAM。我说到“纸张和插口”时,“它们的性能往往会更高”,它们是Minecraft的替代服务器,其性能优于普通MC。
追逐

2
我听说,通常根本不使用交换是个坏主意?至少在服务器环境中,冻结12分钟是不可接受的吗?
9ilsdx 9rvj 0lo

2
@Kais,以我的经验,使用非GUI程序的Windows会更糟,但是如果内存压力很高,它将挂起非前景的GUI程序,这可以解决桌面的问题,前提是桌面应用程序没有背景任务。
西蒙·里希特

2
Vanilla Minecraft也许;但是大型modpack可以在玩家加入之前轻松达到3 GiB :)
六安(Luaan)

4

输出是free -m什么?如果我们不知道您使用了多少内存,那么您拥有的RAM数量将毫无意义。那,我很想知道正在使用多少交换空间。

不过,我确实认为您已经回答了自己的问题。如果您从不关闭它们,则在浏览器中打开“许多选项卡”肯定会减慢您的系统速度,因为无论如何它们都会继续消耗内存。系统死机时,一次打开了多少个?

如果您的系统正在从其他占用大量内存的任务中冻结,例如“从非常复杂的UML图生成很大的图”,这也很有意义。这绝对会降低系统生成图形的速度,因此不足为奇。

听起来这确实是您的系统应该表现的方式。要么就是我在这里丢失了一些东西。

顺便说一句,当您的系统变得无响应时,HDD数据无关紧要,因为内存不足几乎总是罪魁祸首。


1
“那绝对会减慢您的系统的速度”-是的,这是预料之中的,但不会导致无法控制的X会话(即冻结的系统结果),在此我看不到鼠标光标的移动。
Kais

1
这实际上是可以预期的,您所描述的行为正是我在系统上使用过多RAM时发生的情况。我什至使我的系统阻塞到无法切换到基于文本的终端的地步,而您的RAM却增加了一倍。如果您遇到无法使用X会话的情况,则必须切换到基于文本的终端并终止有问题的进程。如果失败,则必须进行硬重启。尽我所能告诉你。
扎克·桑切斯

1
在内存不足的情况下,@ Kais macOS也会变慢。系统实际上没有办法明智地决定它绝对需要在RAM中保留的内存,因此在应用程序之间进行切换会像疯了似的进进出出,直到UI变得无响应。
库萨兰达

5
嗯,并不是没有更有效的方法来使“窗口管理器” UI保持响应。MS研究在禁止需求分页的设计上编写了整个实验OS。概念验证:在Midori中运行“窗口管理器”,模拟包括交换在内的Linux应用程序。到这里,即使正在交换应用程序,“窗口管理器”也将保持响应状态。至少,它可以让您可靠地杀死一些应用程序以释放内存。Linux并不完美。从X11切换到Wayland的Gnome甚至使在重载系统上的响应能力大大恶化。
sourcejedi

2
硬盘统计数据可能很重要。无法响应的一个可能原因是磁盘故障,这会导致大量的I / O积压。但是在这种情况下,我看不到有任何证据。
200_success

4

当我阅读标题时,我立即想到的是“ RAM不足”,因为我自己在Linux上确实遇到了这个问题,在打开太多浏览器选项卡后10分钟以上的疯狂磁盘跳动。我同意,这令人沮丧,需要改进。Windows可以更好地处理这种情况。

一些建议:

  • 在系统托盘中添加一个内存监视器小程序,以便您随时注意。
  • 在Firefox的首选项中,将“内容处理限制”设置为“ 1”。正如该设置下面的文字所述:“其他内容处理可以在使用多个选项卡时提高性能,但同时也会占用更多内存。”
  • 删除或替换所有需要内存的浏览器插件。保留广告拦截器,因为广告比任何拦截器消耗更多的内存。
  • 研究并可能删除任何其他消耗内存的程序。

但是,唯一真正的解决方案是购买更多RAM。

大量的RAM不仅可以防止这种灾难的发生,而且还可以使系统在RAM中建立一个大文件高速缓存,您的系统目前无法做到这一点,因为它的运行非常接近极限。大型文件缓存将使硬盘工作量减少,并且使系统上的几乎所有操作总体上感觉更快。这很值得。


很好的答案,非常感谢。但是关于“其他内容进程可以在使用多个选项卡时提高性能,但也会使用更多的内存”。-如果我理解正确,Firefox是否可以在默认设置下每个选项卡最多打开8个进程?
Kais

1
@Kais我认为每个选项卡只有1个进程。无论如何,如果将限制设置为1,则所有选项卡的总计为1个进程,这将使用较少的内存。
Boann

明白了,再次感谢。
Kais

4

您的htop输出显示您对RAM的需求高于其容量(RAM + SWAP的总和)。因此,显而易见的首要考虑是减少RAM使用或增加RAM可用性。

请注意,由于将窗口/选项卡分配给进程和内存空间的方式,当今的Firefox版本非常耗资源。这样做的目的是避免崩溃的选项卡使整个浏览器崩溃。这玩意儿值这价吗?谁能知道...无论如何,由于上述原因,我也遇到了类似的问题,因为我的Pentium 4主板仅支持2GB的RAM。为了避免可能的内存耗尽崩溃,我在备用SSD上添加了约800M交换空间,显然是为了尽可能少地使用它。我已经通过更改一个称为swappiness的设置来实现这一点,该设置确定内核如何急切地换出内存页面。一些有用的命令如下。

检查当前的可交换性: cat /proc/sys/vm/swappiness

这很可能会为您带来大约60的结果,对于在较低负载的系统上实现最佳性能而言,这是相当高的。对于您来说,显然这会适得其反,因此您可以使用以下命令更改设置:sysctl vm.swappiness=1更改设置,例如在系统运行时更改设置。

要保存这些更改,您必须查找文件/etc/sysctl.conf。在该文件中,更改值或添加行vm.swappiness=1

请注意,这不是您所需要的解决方案,但应提供一个可用的解决方法。

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

以上答案的来源,包括进一步的说明。我发现该帖子对我的情况非常有帮助。


感谢您的答复。对于VM配置,这听起来是一个不错的建议。
Kais

2

关于如何引起,继续和发展问题的一些精彩讨论。我喜欢通过在最初的计算机设计中投入硬件和/或升级现有的实现方式来解决诸如您遇到的问题。你是否可以,

  • 添加内存(32GB非常适合许多设置)

  • 用SSD替换硬盘驱动器

  • 添加用于交换驱动器的SSD(固态驱动器)

  • 在RAM(具有32 GB或更多GB的RAM)中创建交换分区

  • 获得更快的硬盘

  • 迁移到处理速度更快,总线架构更宽/更快的系统。

其中一些硬件升级/更换价格可能远低于$ 100US。这些不是特定于Linux的,也不是特定的软件实现的,但是您使用的硬件似乎不足以完成您的任务。


1
非常有用的答案,感谢您指出硬件更换建议。
Kais

1
我希望它会有所帮助。不知道哪种类型的计算机或特定设备,所以这些是通用步骤,以最有可能进行改进的顺序进行。任何或所有方法都可以帮助您解决特定的速度降低问题,这可能是由于高速缓存,交换的中断以及一般情况下更快的磁盘读取/写入次数所致
老叔叔

6
这些大多数都是很好的建议,但是交换到RAM基本上是没有用的,除非您使用zramzswap进行压缩到RAM的交换-这是值得的,但是交换到未压缩的ramdisk只会产生与释放一样多的RAM压力(实际上,由于开销而略多一些)。
cas

我不确定为什么有人会交换到RAM,除了压缩时,这对于高RAM /低CPU工作负载来说似乎是个好主意。
彼得-

1
@bain:它是如何以往任何时候都好有换出到RAM与页面仍然映射?除非您使用压缩,否则它们仍在使用相同数量的物理RAM页面。 这就是价值所在。唯一的区别是簿记更多,但硬件页表可能更干净。对于仅处理启动而忽略映射的仅启动内存,例如仅在启动期间接触的函数/数据,交换到磁盘会更好,因为它不占用任何DRAM空间。对于不交互使用的后台守护程序,延迟并不重要,因此再次赢得磁盘交换。
彼得·科德斯

2

通常,只是“ X11”变得不可用。为了使键盘上的按键进入程序并在屏幕上显示任何内容,必须运行几个不同进程中的代码。(X服务器从内核获取击键,Xterm或等效项获取事件并决定绘制一些东西,然后向X服务器发送消息以从字体绘制字形。)

使用网络浏览器在显示带有一堆Javascript废话的页面的窗口上挥舞鼠标,可能会导致一堆进程产生一堆消息,所有这些消息都会导致这些进程唤醒并触摸一堆数据。大概包括一堆“缓存”的未压缩位图。因此,这很有可能驱逐更多即将需要的东西。

ctrl + alt + F2切换到另一个虚拟控制台通常可以使登录和运行shell命令的延迟只有几秒钟,这是由于某些原因导致交换异常。 这只是bash; Linux内核不可交换,并且具有所有VT和
键盘<-> TTY代码。


为了避免在没有真正动摇时减慢速度,减少“摇摆”可以有所帮助。例如,我将/proc/sys/vm/swappiness可调参数设置为6在台式机上将具有16GB的RAM和NVMe SSD上的2GB交换分区。您可以阅读有关调整交互式延迟(而不是服务器吞吐量)的更多信息。任何指南都将提到可调参数。

但是,如果您有任何交换,Linux将在调用OOM杀手之前使用它。 保持交换分区较小,足够大以使Linux可以分页,这些废话通常很长时间都不会使用。(例如内存泄漏!)

交换已满,我没有任何问题。现代Linux处理有限的交换空间就可以了。铬(我用它代替了firefox)有时会随着数十个“堆栈溢出”选项卡的打开而变慢,但是The Great Suspender是一个不错的插件,可以在不使用它们时卸载它们。我认为这可以为我节省大量的RAM,尽管它只会卸载没有在文本框中键入任何内容的选项卡。Firefox也可能可用。


正如其他人所建议的那样,与Linux交互使用时16GB的RAM确实不错。 目前DRAM价格相对低廉 ; 在大约1.5年前达到峰值之后,它们基本上又下降了。


好的答案,谢谢。但是,关于“一堆Javascript废话可能导致一堆进程产生大量消息,所有这些消息都会导致这些进程唤醒并触摸一堆数据”-我想知道这些进程是什么,它们是Firefox吗?子进程?
Kais

@Kais:窗口管理器,Web浏览器,X服务器,或者可能是更复杂的桌面中的其他各种X客户端。以及您的鼠标在其窗口上挥舞的任何其他进程(这是我写该句子时的想法)。例如在KDE中,任务栏是plasmakwin窗口管理器分开的进程()。
彼得·科德斯

我使用LXDE,所以就我而言,只有Openbox和XOrg服务器才是唤醒的进程?另外,传递给他们的消息是什么?
Kais

@Kais:通过unix域套接字的X11协议消息。尝试运行xev一段时间以查看通过移动鼠标可以获得的消息。还要尝试strace xev查看涉及客户端的系统调用。
Peter Cordes

我明白了,谢谢。运行该xev命令时,只有通过切换到不同的窗口并单击它们才能获得消息,但是当我在鼠标上移动时情况并非如此。
Kais

-2

浏览某些网站时,几分钟内Linux可能无响应吗?

您没有正确使用Linux。在资源受限的计算机上,这一点尤其明显。您不需要更多的RAM,也不需要更快的处理器。

背景:

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

要“解决”您的问题,请执行以下操作:

不用理会非用户程序,而要开始更改用户程序的优先级(合适的级别),以免引起问题。编辑启动程序的内容,以包括不错的级别,从通常不是问题,到最严重的犯罪者。

现实世界中的例子:

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仍然会在几分钟内变得无响应,这从字面上看是一个更好的解决方案,但这现在不会导致整个OS(Linux)以及您运行的所有其他事物也无响应。


2
我已经在Linux上工作了数十年,既在Linux上具有很多服务器,又在自己的工作站上(通常在非常有限的VM设置中)使用Linux,并且一次不必使用来解决与RAM相关的性能问题nice -n。“您不需要更多的RAM”-他当然需要更多的RAM。或可以使用ulimit硬限制最坏的罪犯,以便他现有的RAM再次足够。“您没有正确使用Linux。” 完全关闭。
AnoE

而且我已经使用Linux GUI安装工作在资源有限的硬件在过去的22年,“好”荷兰国际集团工程解决守信“的Linux没有反应分钟。”
迈克尔

我不否认它有用。我只是说,将其作为使用Linux “正确”方法提出来可能不是最好的选择。
AnoE
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.