AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1167981
Accepted
Codejoy
Codejoy
Asked: 2024-11-21 14:10:41 +0800 CST2024-11-21 14:10:41 +0800 CST 2024-11-21 14:10:41 +0800 CST

使用 du -h -d1 出现奇怪的错误

  • 772

我有一个老化的邮件服务器……它只运行 courier postfix 和 smtp。它是一个 KVM VM,有两个驱动器,一个用于操作系统,一个用于数据。我有一个非常满的数据驱动器(报告 100% 已满,即使已使用和可用空间分布在 24GB 左右)。我不确定为什么或是什么占用了空间然后又释放了它。top 显示主要是 postfix 的 imapd 在执行操作。我无法在这台机器上获取 iotop。所以我想开始释放服务器上用户邮箱中的空间,我会执行 du -h -d1 来尝试找出最大的罪魁祸首是谁。好吧,这个命令运行得比以往任何时候都慢。所以由于它运行缓慢,我想我会发出一个屏幕命令:

du -h -d1 > 邮箱大小.txt

所以我可以在早上查看它并查看使用情况。它写了大约 6 个邮箱,最大的一个是 2.2GB,然后什么都没有。所以来到实际的机器上看看命令在它仍在运行时做了什么,看到了这个:

[root@xmail]# du -h -d1 > /root/mailboxsizes.txt
[14280.306953] INFO: task imapd:12559 blocked for more than 120 seconds.
[14280.307710] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[14280.309680] imapd           D ffff8800d3d9cd98     0 12559      1 0x00000080
[14280.310591]  ffff8800b17bbc20 0000000000000086 ffff880057bbce70 ffff8800b17bbfd8
[14280.310591]  ffff8800b17bbfd8 ffff8800b17bbfd8 ffff880057bbce70 ffff8800d3d9cd90
[14280.313532]  ffff8800d3d9cd94 ffff880057bbce70 00000000ffffffff ffff8800d3d9cd98
[14280.313532] Call Trace:
[14280.315669]  [<ffffffff8168d159>] schedule_preempt_disabled+0x29/0x70
[14280.316637]  [<ffffffff8168adb5>] __mutex_lock_slowpath+0xc5/0x1c0
[14280.316637]  [<ffffffff81208e17>] ? unlazy_walk+0x87/0x140
[14280.318543]  [<ffffffff8168a21f>] mutex_lock+0x1f/0x2f
[14280.319516]  [<ffffffff81683c93>] lookup_slow+0x33/0xa7
[14280.320690]  [<ffffffff8120c8f3>] path_lookupat+0x773/0x7a0
[14280.321718]  [<ffffffff81183775>] ? filemap_fault+0x215/0x410
[14280.321718]  [<ffffffff811de5e5>] ? kmem_cache_alloc+0x35/0x1e0
[14280.323363]  [<ffffffff8120f23f>] ? getname_flags+0x4f/0x1a0
[14280.324348]  [<ffffffff8120c94b>] filename_lookup+0x2b/0xc0
[14280.324348]  [<ffffffff81210367>] user_path_at_empty+0x67/0xc0
[14280.325307]  [<ffffffff811b1431>] ? handle_mm_fault+0x6b1/0xfe0
[14280.327150]  [<ffffffff812103d1>] user_path_at+0x11/0x20
[14280.327965]  [<ffffffff81203843>] vfs_fstatat+0x63/0xc0
[14280.328093]  [<ffffffff81203dae>] SYSC_newstat+0x2e/0x60
[14280.328093]  [<ffffffff81692875>] ? do_page_fault+0x35/0x90
[14280.330895]  [<ffffffff8168ea88>] ? page_fault+0x28/0x30
[14280.331790]  [<ffffffff8120408e>] SyS_newstat+0xe/0x10
[14280.331857]  [<ffffffff81697089>] system_call_fastpath+0x16/0x1b

我是系统管理新手,除了与 imapd 有关的东西之外,我对这些都一无所知。我已经多次重启这台机器,但它几乎没有释放任何硬盘空间或资源。我不明白发生了什么,为什么 du 会像上面那样失败。我在这里主要想问从哪里开始?虽然这台机器很旧,而且总是有它的问题,但它以前从来没有出现过这种情况(尽管我承认数据驱动器空间不足),但如果我清除它,就会有东西把它吃掉。

为了完整性:

df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        2.9G     0  2.9G   0% /dev
tmpfs           2.9G     0  2.9G   0% /dev/shm
tmpfs           2.9G   41M  2.8G   2% /run
tmpfs           2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/vda3        21G   18G  2.1G  90% /
/dev/vdb        459G  435G  442M 100% /mail
/dev/vda1       976M  119M  790M  14% /boot
tmpfs           581M     0  581M   0% /run/user/0
tmpfs           581M     0  581M   0% /run/user/1000


top - 06:06:53 up  6:52,  3 users,  load average: 36.42, 36.64, 31.74
Tasks: 346 total,   8 running, 338 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.4 us,  1.2 sy,  0.0 ni,  0.0 id, 89.9 wa,  0.0 hi,  0.0 si,  1.5 st
KiB Mem :  5946284 total,   130280 free,  2278016 used,  3537988 buff/cache
KiB Swap:  2516988 total,  1906332 free,   610656 used.  3362528 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
19174 postfix   20   0   27028   5504   1488 R   8.3  0.1   0:38.53 imapd       
19586 postfix   20   0   27028   5504   1488 D   7.6  0.1   0:32.18 imapd       
19008 postfix   20   0   27028   5504   1488 R   7.0  0.1   0:48.61 imapd       
19372 postfix   20   0   27464   5872   1504 D   4.3  0.1   0:30.38 imapd       
20087 postfix   20   0   27028   5504   1488 D   4.3  0.1   0:23.27 imapd       
20188 postfix   20   0   27028   5504   1488 D   4.3  0.1   0:23.31 imapd       
20353 postfix   20   0   27028   5508   1488 D   4.3  0.1   0:23.05 imapd       
19963 postfix   20   0   27028   5508   1488 D   4.0  0.1   0:23.85 imapd       
20275 postfix   20   0   27028   5508   1488 D   4.0  0.1   0:22.56 imapd       
18460 postfix   20   0   29348   5748   1588 R   3.7  0.1   0:38.09 imapd       
20236 postfix   20   0   27028   5516   1488 D   3.7  0.1   0:22.86 imapd       
   32 root      20   0       0      0      0 S   1.7  0.0   5:57.44 kswapd0     
20079 postfix   20   0   32728   9152   1520 S   1.7  0.2   0:01.90 imapd       
19702 postfix   20   0   27028   5516   1488 D   1.3  0.1   0:27.77 imapd       
18575 postfix   20   0   30472   6848   1596 D   1.0  0.1   0:14.86 imapd       
19782 postfix   20   0   27028   5508   1488 D   1.0  0.1   0:27.02 imapd       
 1026 root      20   0 1174028  22616   8992 S   0.7  0.4   2:53.90 fail2ban-s+ 

不确定要看什么,然后尝试下一步找出我可以在哪里找到一些文件夹,并知道我们保留了谁的旧收件箱以清除它们,以便释放空间并希望使服务器性能更好。

我唯一的想法是,让 systemctl 暂时停止 postfix,看看 du 和 ls 是否工作得更好,并仔细检查 top 是否没有因此而被 ping 出去。

如果与 iostat 相关,则:

iostat
Linux 3.10.0-514.16.1.el7.x86_64 (xmail)    11/21/2024  _x86_64_    (3 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.95    0.01    1.29   88.86    0.65    3.24

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda              11.92       252.15        61.60    6335865    1547820
vdb            1517.62     62131.62        78.76 1561227117    1979120
linux
  • 1 1 个回答
  • 70 Views

1 个回答

  • Voted
  1. Best Answer
    HBruijn
    2024-11-21T18:47:12+08:002024-11-21T18:47:12+08:00

    屏幕上显示的消息是内核警告。此类警告通常会广播到控制台、记录在内核环形缓冲区中(通常使用带有dmesg可选开关的命令显示-T)和/或复制到日志文件中/var/log。

    通常,您在该控制台中运行的命令并不是导致显示错误的原因。

    但在这种情况下可能存在相关性。

    大多数开源 IMAP 实现都以Maildir/每封电子邮件作为单独文件的格式存储消息。在具有 450 GB 邮件的文件系统中,将有很多目录,其中许多目录包含大量电子邮件,因此也有很多文件。在该 /mail 文件系统上运行可能 (极其) 低效,具体取决于它使用的文件系统。例如,您可以使用和/或du 检查正在使用的文件系统。某些文件系统的性能优于其他文件系统,但单个目录 (在单个收件箱或其他邮件文件夹中) 中的数万个文件可能已经存在问题。cat /proc/mounts/etc/fstab

    类似地,当 imapd 需要索引这样的收件箱或其他邮件文件夹时,也会很费力。

    文件系统已满(如命令所示df)会使问题更加严重。您的用户可能仍在接收消息、阅读消息和删除消息,因此负载可能相当大。

    df -i如果您的 inode 也用完了,那么可能还需要运行。


    一般来说,(几乎)满的文件系统都会遭受各种性能问题。

    对于虚拟机来说,通常可以简单地从虚拟机管理程序向虚拟磁盘分配更多存储空间,然后扩展/mail文件系统,许多问题就会消失。这两项操作通常都是可以在工作时间内安全执行的在线操作。

    相反的是找到浪费的存储空间,并通过删除不再需要的数据来回收它。


    关于释放空间:

    • 删除不再存在的用户帐户的 Maildir 和数据。

    • IMAP 协议要求客户端将单个邮件标记为已删除,但这实际上并未从 Maildir 中删除文件。这需要单独的 EXPUNGE 命令。一些损坏/遗留的客户端不会发出该删除命令,已删除的邮件将无限期地保留在您的邮件服务器上。

    • 其他邮件客户端会将邮件移至“垃圾箱”或类似名称的文件夹来“删除”邮件,这些邮件也会无​​限期地保留在那里。清空垃圾箱可以安全地释放必要的空间。

    根据您使用的邮件服务器,可能会有特定的工具来帮助您进行清理,例如doveadm-expunge可以搜索带有 DELETED 标志的电子邮件并将其从文件系统中正确删除的工具。

    • 2

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve