Linux 是否有“清理”内存的机制?例如,测试内存并将区域标记为脏,如果它们出现故障,以便即使安装了坏的内存芯片,系统也可以继续“安全”运行?!
在 Linux 中,您可以使用 echo 0 > /sys/devices/system/cpu/cpu1/online 关闭 CPU 内核(或物理 CPU) 假设硬件完全关闭 CPU 并切断其电源,禁用它不是更好内核完全而不是依赖于处理器的各种睡眠状态?
为了说明原理,我正在考虑针对具有四个 CPU 的系统的这些思路(伪代码):
if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online
if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online
if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online
Run Code Online (Sandbox Code Playgroud) 做了一些研究,我发现可以通过在 /proc/pid/oom_adj 中插入一个值来调整甚至使某些进程对 OOM 杀手免疫,我当然需要使用 pidof 或 pgrep 为我的进程找到 pid 或类似的东西,并制作一个脚本,一旦我的所有进程都启动并运行,我就会运行该脚本。
OOM 杀手的问题就像任何其他杀手一样。表面上看起来很理智很理性,但其实内心很不安,很疯狂,常常无法做出正确的判断。
现在我个人不介意杀戮,只要我知道发生了什么并且对受害者有一定的控制权(冷静的人,我在谈论计算机的东西)所以我正在寻找更好的方法来保护针对可怕的 OOM 杀手的某些进程,这样我就不必在每次我的所有程序运行时或每当我启动一个新程序时都运行脚本。关于如何轻松实现这一目标的任何想法?
我有一个网络,其中多台计算机都在同一网络上,并且由于我的带宽非常有限,我想对流量进行优先级排序,就像 CPU 调度程序对进程进行优先级排序一样。
示例: 计算机 A:用于网络内容:YouTube、下载、新闻、电子邮件等。 计算机 B:通过 HTTP 传输文件 计算机 C:通过 ftp、rsync 等传输文件
我想做的是,如果 A 需要的话,给 A 高达可用带宽的 90%。剩余的 (10%) 在 B 和 C 之间分配(如果双方都很忙,则各 5%) 如果 A 没有利用所有带宽,那么 B 和 C 当然应该共享全部带宽(只要双方都达到最大带宽,各 50%)他们的带宽)。
所有计算机都位于同一网络上(例如 192.168.1.0 - 192.168.1-10)。
如果有人能够阐明我应该如何设置我的网络来实现这一目标,我将不胜感激。老实说,我实际上需要一个关于如何设置它的分步指南。
网络设置:(ADSL调制解调器配置为桥接模式(1500kbps/300kbps))
[ADSL调制解调器(桥)]<->[pfsense2.0]<->[交换机]<->[计算机A、B、C...等]
我有一个 RAID5 阵列正在运行,现在还有一个我昨天设置的 raid1。由于 RAID5 计算奇偶校验,因此它应该能够捕获一个磁盘上的静默数据损坏。但是对于 RAID1,磁盘只是镜像。我想得越多,我认为 RAID1 实际上是相当危险的。当然它可以使我免于磁盘故障,但在保护磁盘上的数据方面可能没有那么好(实际上谁对我更重要)。
如果 RAID1 真的没有给我数据保护而是磁盘保护,我可以用 mdadm 做一些技巧来创建两个磁盘“类似 RAID5”的设置吗?例如,容量松散但仍为数据保留冗余?
在 Linux 中,可以通过 UUID 或标签挂载设备(磁盘)。我使用 UUID 已经有一段时间了,主要是因为我在 IRC 上看到了一个关于按标签安装是一个非常糟糕的想法的讨论。
如果选择一个非常独特的标签名称,如 6581_var、6502_root、8580_home、DFF180_usr、68030_boot、BFEC01_WD_Disk05,我不明白为什么按标签安装会是一个坏主意。等等.... ;)
所以我的问题是:
我编写了一个简单的 zram.service 文件,它将为我设置压缩交换空间,以避免过多占用我的磁盘。zram 比其他交换设备具有更高的优先级。
问题是,当我尝试休眠系统时,它会将系统状态写入交换,在本例中是 zram,并且由于断电时内存内容会丢失,这当然不起作用。
解决方案是在执行systemctl hibernate之前停止我的zram.service,并在系统备份时再次启动它。
据我发现 systemctl hibernate 启动 /lib/systemd/system/systemd-hibernate.service 。我已将此服务复制到 /etc/systemd/system/ 来覆盖它,并且我可能可以通过使用 'ExecStartPost=' 节来使其工作,但我认为当另一个 systemd 服务启动时,必须有更好的方法来停止它开始,反之亦然。
编辑:对于那些感兴趣的人来说,Debian 系统上的工作 zram 服务
[Unit]
Description=ZRAM swap
Conflicts=hibernate.service
[Service]
Environment=ZRAM_MEM=1G
Environment=ZRAM_CMPALGO=lz4
Environment=ZRAM_CMPSTREAMS=2
Type=oneshot
User=root
ExecStartPre=/bin/sh -c "/sbin/modprobe zram num_devices=1"
ExecStartPre=/bin/sh -c "echo $ZRAM_CMPALGO >/sys/block/zram0/comp_algorithm"
ExecStartPre=/bin/sh -c "echo $ZRAM_CMPSTREAMS >/sys/block/zram0/max_comp_streams"
ExecStartPre=/bin/sh -c "echo $ZRAM_MEM > /sys/block/zram0/disksize"
ExecStartPre=/bin/sh -c "/sbin/mkswap /dev/zram0"
ExecStart=/sbin/swapon /dev/zram0 -p 10
ExecStop=/sbin/swapoff /dev/zram0
ExecStop=/bin/echo 1 > /sys/block/zram0/reset
ExecStop=/sbin/rmmod zram
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)