我使用的是 Linux 4.15,当我浏览谷歌、Facebook 或任何其他资源匮乏的网站时,这种情况发生在我身上很多次 - 整个操作系统变得无响应、冻结和无用。我看到它唯一能工作的是磁盘(主系统分区格式化为 ext4),它被大量使用(I/O 节流)。
我被迫等待一分钟或更长时间才能摆脱臃肿,有时它会保持12分钟无响应,因此我感到沮丧。操作系统无法很好地处理多任务处理这一事实往往反映了一种绝对奇怪和不可接受的行为。
不仅发生这种情况与Firefox,但与任何的JavaScript解释器应用程序,包括微软VSCode或角-CLI(ng serve
命令),以及执行任何其他渴求资源的线程-例如的情况下plantuml生成从一个非常大的图形时非常复杂的UML图。
今天,在为最近从坏 USB 端口拔下的外部 HDD(通过 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
Run Code Online (Sandbox Code Playgroud)
作为硬件,我正在使用:
英特尔酷睿 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
Run Code Online (Sandbox Code Playgroud)8 GB 内存。(见htop
下面的输出)。
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.
Run Code Online (Sandbox Code Playgroud)这些是每个资源使用的结果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
Run Code Online (Sandbox Code Playgroud)
这些也是 VM 统计信息的结果,由命令生成vmstat 5
。
AFAIK,英国媒体报道不应该使操作系统无响应,所以我不会考虑甚至不接受英国媒体报道是问题的根本原因——因为操作系统工作是隔离进程并确保多任务处理。
我不知道这个问题是特定于操作系统、特定于硬件还是特定于配置。
有任何想法吗?
sou*_*edi 29
是什么让 Linux 如此迟钝?
过度使用可用 RAM 会导致大量交换,绝对可以做到这一点。请记住,机械硬盘上的随机访问 I/O 需要移动读/写磁头,每秒只能执行大约 100 次搜索。
如果您“过多地”过度使用 RAM,Linux 通常会完全出去吃午饭。我还有一个旋转磁盘和 8GB RAM。我遇到了一些内存泄漏软件的问题。也就是说,它们的内存使用量会随着时间的推移不断增长并且永远不会减少,因此控制它的唯一方法是停止软件然后重新启动它。根据我在此期间的经验,如果您生成 3GB 以上的交换,听到延迟超过 10 分钟我并不感到惊讶。
在您拥有超过 3GB 的交换空间的所有情况下,您不一定会看到这一点。理论说关键概念是颠簸。另一方面,如果您尝试在两个不同的工作集之间切换,并且需要交换 3GB 的进出,在 100MB/s 下,即使 I/O 模式可以完美优化,也至少需要 60 秒。在实践中,I/O 模式远非最佳。
在我遇到困难之后,我将交换空间重新格式化为 2GB(比以前小了几倍),因此系统将无法进行如此深的交换。您甚至可以在不调整分区大小的情况下执行此操作,因为mkswap
需要一个可选的大小参数。
粗略的平衡是在内存不足和进程被杀死之间,以及让系统挂起太久以至于你放弃并重新启动之间的平衡。不知道4GB的swap分区是不是太大了;这可能取决于你在做什么。重要的是要注意磁盘何时开始搅动,检查您的内存使用情况,并做出相应的响应。
检查多进程应用程序的内存使用情况很困难。要在不重复计算共享内存的情况下查看每个进程的内存使用情况,您可以使用sudo atop -R
、按M和m并查看 PSIZE 列。您也可以使用smem
. smem -t -P firefox
将显示所有 Firefox 进程的 PSS,然后是总 PSS 的一行。这是测量基于 Firefox 或 Chrome 浏览器的总内存使用量的正确方法。(虽然也有用于显示内存使用情况的浏览器特定功能,这些功能将显示各个选项卡)。
小智 5
AFAIK,英国媒体报道不应该使操作系统无响应,所以我不会考虑甚至不接受英国媒体报道是问题的根本原因
你不会喜欢这个,但我认为英国媒体报道是你的问题(虽然我不确定是内存还是磁盘的问题)。不幸的是,Linux 内核在处理高内存压力情况方面很糟糕,而且众所周知,一旦内存耗尽,基本上需要重新启动。有三件事让我相信您的问题是资源枯竭:
基本上,将这三个放在一起,您的系统就没有足够的资源来做任何事情。不幸的是,Linux 处理低内存情况的能力很差(与 Windows 中的 NT 内核相比),但这似乎就是事实。您可以在此 Reddit 线程及其链接的邮件列表中找到更多讨论。
至于如何解决您的情况,我会说增加交换大小是个好主意,但由于磁盘空间不足,这将是一个问题。除非你的 Minecraft 服务器有很多人,否则我认为将它的内存减少到 1024m 左右是安全的(我个人使用 1024m 大约 10 个人,它工作正常)。我还会为您的 Minecraft 服务器使用 spigot 或 paper,因为它们往往性能更高。
祝你好运!