标签: kernel

rm 在包含数百万个文件的目录上

背景:物理服务器,大约两年,7200-RPM SATA 驱动器连接到 3Ware RAID 卡,ext3 FS 挂载 noatime 和 data=ordered,不在疯狂负载下,内核 2.6.18-92.1.22.el5,正常运行时间 545 天. 目录不包含任何子目录,只有数百万个小(~100 字节)文件,还有一些更大的(几 KB)文件。

我们有一台服务器在过去几个月中出现了一些问题,但我们直到前几天才注意到它,因为它开始无法写入目录,因为它包含太多文件。具体来说,它开始在 /var/log/messages 中抛出这个错误:

ext3_dx_add_entry: Directory index full!
Run Code Online (Sandbox Code Playgroud)

有问题的磁盘有大量剩余的 inode:

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda3            60719104 3465660 57253444    6% /
Run Code Online (Sandbox Code Playgroud)

所以我猜这意味着我们达到了目录文件本身可以有多少条目的限制。不知道会有多少文件,但正如您所见,不能超过三百万左右。不是那么好,请注意!但这是我的问题之一:上限到底是多少?是可调的吗?在我被骂之前——我想把它调低;这个庞大的目录导致了各种各样的问题。

无论如何,我们在生成所有这些文件的代码中找到了问题,我们已经更正了它。现在我坚持删除目录。

这里有几个选项:

  1. rm -rf (dir)

    我先试过这个。在它运行了一天半没有任何明显影响后,我放弃并杀死了它。

  2. 目录上的 unlink(2):绝对值得考虑,但问题是通过 fsck 删除目录中的文件是否比通过 unlink(2) 删除更快。也就是说,以某种方式,我必须将这些 inode 标记为未使用。当然,这假设我可以告诉 fsck 不要删除 /lost+found 中文件的条目;否则,我只是转移了我的问题。除了所有其他问题之外,在阅读更多内容之后,结果证明我可能不得不调用一些内部 FS 函数,因为我能找到的 unlink(2) 变体都不允许我随意删除一个包含条目的目录。呸。
  3. while [ true ]; do ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null; …

ext3 directory kernel rm

118
推荐指数
6
解决办法
5万
查看次数

如何列出加载的 Linux 模块参数值?

有没有标准的方法来列出加载的 Linux 模块的参数值?我基本上是在探索这个Linux 内核模块参数问题的另一个答案,因为我感兴趣的模块没有/sys/modules/<module_name>/parameters接口。

linux kernel

100
推荐指数
4
解决办法
11万
查看次数

“dd”中的“bs”选项真的能提高速度吗?

时不时地,我被告知要提高“dd”的速度,我应该仔细选择合适的“块大小”。

即使在这里,在 ServerFault 上,其他人也写道...最佳块大小取决于硬件...(iain)或“ ...完美的大小将取决于您的系统总线、硬盘驱动器控制器、特定驱动器本身,以及每个驱动程序......(克里斯 - s)

由于我的感觉有点不同(顺便说一句:我认为深度调整 bs 参数所需的时间远高于获得的增益,在节省时间方面,并且默认是合理的),今天我刚去了通过一些快速而肮脏的基准测试。

为了降低外部影响,我决定阅读:

  • 从外部 MMC 卡
  • 从内部分区

和:

  • 已卸载相关文件系统
  • 将输出发送到 /dev/null 以避免与“写入速度”相关的问题;
  • 避免 HDD 缓存的一些基本问题,至少在涉及 HDD 时。

在下表中,我报告了我的发现,读取了具有不同“bs”值的 1GB 数据(您可以在此消息的末尾找到原始数字):

在此处输入图片说明

基本上得出的结论是:

  • MMC:使用 bs=4(是的!4 字节),我达到了 12MB/s 的吞吐量。我从 bs=5 及以上得到的最大 14.2/14.3 的值并不那么遥远;

  • 硬盘:bs=10 我达到了 30 MB/s。肯定低于默认 bs=512 获得的 95.3 MB,但......也很重要。

此外,很明显,CPU 系统时间与 bs 值成反比(但这听起来很合理,因为 bs 越低,dd 生成的系统调用数量就越高)。

说了以上所有,现在的问题是:有人可以解释(内核黑客?)这种吞吐量所涉及的主要组件/系统是什么,以及是否真的值得努力指定高于默认值的 bs?


MMC 案例 - 原始数字

bs=1M

root@iMac-Chiara:/tmp# time dd if=/dev/sdc of=/dev/null bs=1M count=1000
1000+0 …
Run Code Online (Sandbox Code Playgroud)

linux kernel dd disk-image

77
推荐指数
2
解决办法
14万
查看次数

在 Linux 中禁用交换的最佳方法

我正在运行一个自定义编译的 3.18.9 内核,我想知道在系统上禁用交换的最佳方法。如果它有所作为,我也会使用 init。

是否足以注释或删除交换行/etc/fstab以防止交换在启动时工作/挂载,或者我应该重新编译内核而Support for paging of anonymous memory (swap)不是 100% 确定它没有被启用?

我运行加密分区并希望防止意外泄漏到硬盘。我的系统规格也足够好,我可以在无交换环境中生存。

linux kernel swap init

74
推荐指数
4
解决办法
19万
查看次数

vm.overcommit_memory 如何工作?

当我使用默认设置时:

vm.overcommit_memory = 0
vm.overcommit_ratio = 50
Run Code Online (Sandbox Code Playgroud)

我可以从/proc/meminfo文件中读取这些值:

CommitLimit:     2609604 kB
Committed_AS:    1579976 kB
Run Code Online (Sandbox Code Playgroud)

但是,当我vm.overcommit_memory从更改0为 时2,我无法启动更改前可以启动的同一组应用程序,尤其是 amarok。我不得不更改vm.overcommit_ratio300,因此可以增加限制。现在,当我启动 amarok 时,/proc/meminfo显示以下内容:

CommitLimit:     5171884 kB
Committed_AS:    3929668 kB
Run Code Online (Sandbox Code Playgroud)

这台机器只有 1GiB 的内存,但是 amarokvm.overcommit_memory设置为 0时没有问题。但是在设置为 的情况下2,amarok 需要分配超过 2GiB 的内存。这是正常行为吗?如果是这样,谁能解释为什么,例如,firefox(比 amarok 消耗的内存多 4-6 倍)在更改前后以相同的方式工作?

memory kernel sysctl

61
推荐指数
2
解决办法
11万
查看次数

软限制与硬限制?

任何人都可以通俗地解释软限制和硬限制之间的区别是什么?

我应该将软限制和硬限制设置为相同吗?或者软度应该显着降低?无论哪种方式,系统都会受益吗?

linux ubuntu kernel ulimit

49
推荐指数
2
解决办法
10万
查看次数

如何在不查看 /boot/config-* 的情况下检查编译了哪些内核选项

如何在不查看的情况下检查哪些选项被编译到 Linux 内核中,/boot/config-*以及我是否无权访问/boot/config-*剩余的文件?

linux kernel

47
推荐指数
2
解决办法
5万
查看次数

如何找出导致 Windows 中断的原因?

偶尔我会遇到具有高处理器中断时间百分比的服务器(Windows 2003 和 2008)。有没有办法查看导致中断的程序或设备?

windows performance debugging kernel interrupts

46
推荐指数
2
解决办法
7万
查看次数

内核卸载后损坏的 /vmlinuz 和 /initrd.img 符号链接

操作系统:Ubuntu 8.04 LTS 服务器版

我们刚刚使用以下命令回滚了内核更新:

sudo apt-get remove linux-image-2.6.24-24-server
Run Code Online (Sandbox Code Playgroud)

卸载成功,但是apt-get退出前提示如下信息:

The link /vmlinuz is a damaged link
Removing symbolic link vmlinuz
 you may need to re-run your boot loader[grub]
The link /initrd.img is a damaged link
Removing symbolic link initrd.img
 you may need to re-run your boot loader[grub]
Run Code Online (Sandbox Code Playgroud)

我们应该担心这个消息吗?我们需要重新运行 GRUB 吗?如果我们必须重新运行 GRUB,我们该怎么做呢?

提前致谢。

linux ubuntu kernel rollback grub

43
推荐指数
2
解决办法
3万
查看次数

增加 net.core.somaxconn 会有所不同吗?

我对 net.core.somaxconn 参数产生了争论:有人告诉我,如果我们更改默认值 128,它不会有任何区别。

我相信这可能足以证明:

“如果积压参数大于 /proc/sys/net/core/somaxconn 中的值,则它会被静默截断为该值” http://linux.die.net/man/2/listen

但事实并非如此。

有谁知道一种方法可以用两台机器来证明这一点,坐在 Gbit 网络上?最好的方法是针对 MySQL、LVS、apache2 (2.2)、memcached。

networking linux kernel

42
推荐指数
1
解决办法
11万
查看次数