- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们在 Linux 上遇到了一个问题,随着时间的推移,目录 inode 变得越来越大并且导航速度变慢,因为许多文件被创建和删除。例如:
% ls -ld foo
drwxr-xr-x 2 webuser webuser 1562624 Oct 26 18:25 foo
% time find foo -type f | wc -l
518
real 0m1.777s
user 0m0.000s
sys 0m0.010s
% cp -R foo foo.tmp
% ls -ld foo.tmp
drwxr-xr-x 2 webuser webuser 45056 Oct 26 18:25 foo.tmp
% time find foo.tmp -type f | wc -l
518
real 0m0.198s
user 0m0.000s
sys 0m0.010s
原目录有518个文件,表示1.5MB,遍历1.7秒。
重建后的目录文件数相同,表示45K,遍历0.2秒。
我想知道是什么原因造成的。我的猜测是碎片——一般来说,这不应该是 Unix 文件系统的问题,但在这种情况下,我们将目录用于短期缓存文件,因此不断地创建、重命名和删除大量小文件.
我还想知道是否有一种方法可以转储目录的文字二进制内容——也就是说,读取目录就好像它是一个文件——这可能会让我深入了解为什么它这么大。 Perl 的 read() 和 sysread() 都不允许我:
swartz> perl -Mautodie -MPOSIX -e 'sysopen(my $fh, "foo", O_RDONLY); my $len = sysread($fh, $buf, 1024);'
Can't sysread($fh, '', '1024'): Is a directory at -e line 1
系统信息:
Linux 2.6.18-128.el5PAE #1 SMP Wed Dec 17 12:02:33 EST 2008 i686 i686 i386 GNU/Linux
谢谢!
乔恩
最佳答案
对于问题 1,外部碎片通常会导致大约 2 倍左右的开销,1 加上分配粒度方面的内部碎片。这些都无法解释您的观察结果。
所以,我不认为这是正常的稳态碎片。
最明显的猜测是 1.5MB 是高水位线;有一次它确实有 1.5MB 字节的条目或 1.5MB/2 字节的条目以及预期的碎片。
另一种猜测是 50% 规则被非马尔可夫分配所覆盖。想象一下,我用“tmp%d”命名文件,所以,tmp1、tmp2、... tmp1000、tmp1001、...
这里的问题是 rm tmp1
没有为 tmp1001
腾出空间。这显然是一个大胆的猜测。
Q2:没有很好的读取raw目录的方法。 AFAIK,您需要破解内核或使用 debugfs 更改 inode 类型,读取它,然后将其改回,或者使用 debugfs 读取 inode,获取 block 号,然后读取 block 。功能调试方法可能更合理。
您可以通过确保启用索引来解决性能问题。请参阅 tune2fs
。
1Knuth 的百分之五十法则:在稳定状态下,50% 的操作是分配,50% 是空闲,50% 的空闲 block 合并,然后空洞是 50% 的分配,50 % 的空间被浪费了。 (也就是 100% 的开销。)这被认为是“正常的”。 Malloc 也有同样的问题。
关于linux - Unix 目录 inode - 碎片和转储目录内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1628032/
我今天在这里看到了 Ayende 关于 NH 分片的文章 http://ayende.com/blog/4252/nhibernate-shards-progress-report .我第一次听说 N
我正在尝试使用 Scrapy 和 Cloudflare 抓取 URL,但我无法获得任何结果: 2018-07-09 22:14:00 [scrapy.core.engine] INFO: Spider
我用于调试日志的Graylog2服务器上存在一些磁盘问题。现在有未分配的分片: curl -XGET http://host:9200/_cat/shards graylog_292 1 p STAR
我正在做一个小机器人,它应该提供来自网站(ebay)的信息并使用 splinter 和 python 将其放入列表中。我的第一行代码: from splinter import Browser wit
我正在尝试通过 splinter 从模态框的下拉菜单中选择内容。我很容易找到这个下拉菜单,例如: (Pdb) dropdown = next(i for i in my_browser.find_by
我的 APC 总是达到 100% 碎片。我的 VPS 有 1GB 内存,APC 分配给它 256mb,但它只使用了 256mb 中平均 100mb(最大 150mb)的内存。 我必须重新启动 php-
所以我正在使用 python splinter library测试一个网络应用程序,当我检查一个元素是否存在并且我手动找到每个元素来操作它时,我遇到了一个问题。 问题是,当输入列表大于 4 项或更多时
我尝试从具有以下 html 代码的下拉列表中选择“本地主机”: Local Host ah005 这是我的 pyt
我正在使用 Spring 和 Thymeleaf 开发应用程序,我想知道如何使用 thymeleaf 片段。 Thymeleaf 与 JSP 的优点是我们不必运行应用程序来查看模板,但是,当我们将模板
我在 linux 上用 ping 做了一些测试,我有点好奇 DF 位和碎片是如何工作的。我一直在发送一些带有命令 -M do 的包和一些带有 -M dont 的包,我意识到即使发送小于 MTU 的包,
我尝试从原始 H264 视频数据创建片段 MP4,以便我可以在互联网浏览器的播放器中播放它。我的目标是创建实时流媒体系统,媒体服务器会将碎片化的 MP4 片段发送到浏览器。服务器将缓冲来自 Raspb
在 mongodb 中。如果你想构建一个有两个分片的生产系统,每个分片都是一个具有三个节点的副本集,你必须启动多少 mongod 进程? 为什么答案是9? 最佳答案 因为每个分片需要 3 个副本 x
我是 python 和 scrapy 的新手。我正在尝试遵循 Scrapy 教程,但我不明白 storage step 的逻辑. scrapy crawl spidername -o items.js
1、Sharding 的应用场景一般都那些? 当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大。试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,
我正在通过以太网发送 2000 字节 JSON(以太网 MTU 1500 字节),因为我的数据包大于以太网 MTU,所以我的消息被分段,如您在下面的 Wireshark 捕获中看到的那样。现在我正在尝
我决定为我的文档实现以下 ID 策略,它将文档“类型”与 ID 结合起来: doc.id = "docType_" + Guid.NewGuid().ToString("n"); // create
是否可以编写 ip6tables 规则来阻止格式错误的 ipv6 分段数据包。这基本上是为了我们电器盒的ipv6认证。我们运行在:rhel 5.5 和内核:2.6.18-238.1.1.el5 我们目
有很多关于 .NET LOH 的可用信息,并且已经在各种文章中进行了解释。但是,似乎有些文章不够精确。 过时信息 在Brian Rasmussen's answer (2009), program m
我还有一个 Unresolved 问题 HERE关于一些可能涉及 LOH 碎片以及其他未知数的绝望内存问题。 我现在的问题是,公认的做事方式是什么?如果我的应用程序需要在 Visual C# 中完成,
经过 20 年的专业发展,我仍然发现自己对数据库性能的某些方面一无所知。这是那些时代之一。这里和其他地方有数以千计的关于表和索引碎片及其对性能影响的问题。我知道基本的注意事项,但有时似乎没有“好的”答
我是一名优秀的程序员,十分优秀!