我的一个 Web 服务器遭受了 DDOS 攻击。一切都很好,只是有数百万个 PHP 会话文件占用了分区的 100% inode。整个 / 只有一个分区
尝试了几种解决方案,但只起到一定作用。 https://unix.stackexchange.com/questions/37329/efficiently-delete-large-directory-containing-thousands-of-files?newreg=07f276292205457ab9975a0ea68e9273
http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
释放 8% 的 inode 后,磁盘删除任何内容的速度就变得非常慢。
rm -f filename*
rsync -a --delete empty_dir/ yourdirectory/
perl -e 'for(<*>){((stat)[9]<(unlink))}'
现在磁盘看起来像这样
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 2385895 235545 92% /
tmpfs 128789 1 128788 1% /dev/shm
目录中仍有 600 多万个小文件。上述方法每秒删除约 2 个文件
我读过有关 B 树重新平衡的文章。但我该如何诊断/解决删除速度慢的问题?
```
答案1
一个快捷方法是移动/重命名当前/tmp
目录并创建一个新目录,这样正常使用 /tmp
就不会再受到影响。
mkdir /newtmp
chmod 1777 /newtmp
mv /tmp /tmp-old && mv /newtmp /tmp
也许您也需要做同样的事情/var/tmp
。这样您就可以平静地清理 /tmp-old。
作为缓解措施:
考虑使用部分内存创建一个单独的 tempfs 分区,用作 PHP 会话文件的存储,这将在一定程度上限制对系统其余部分的影响。
IE
mkdir /var/cache/php
chmod 1777 /var/cache/php
mount -t tmpfs size=500M /var/cache/php
并编辑您的php.ini
并设置
session.save_path = "/var/cache/php"