问题标签 [fragmentation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何使用堆转储计算堆碎片统计信息
有谁知道是否有任何工具可以使用堆转储计算堆碎片?
networking - 当 IP 数据包被多次分段时,“More Fragment”位的值
假设我有两台主机,主机 A 和主机 B,主机 A 向 B 发送一个 1500 字节的数据包,它们之间有两个路由器,第一条链路的 MTU 为 800 字节,第二条链路的 MTU 为 500 字节他们。
据我了解,数据包必须两次都被分段。数据包必须被分成 3 个数据包(2 个大小相同的数据包和一个较小的数据包)。
然后,当我们点击第二个路由器时,我们将再次对前两个分段数据包中的每一个进行分段。前两个原始片段将产生 1 个较大的片段(接近 500 字节)和一个较小的片段。
这就是我感到困惑的地方。
我知道前 3 个片段的“更多片段”位应该设置为 1,除了最后一个片段表示数据包是片段的一部分,直到并包括下一个“更多片段”设置为 0 的数据包。但是,对于第二组片段我不太确定。如果这是第一次对数据包进行分段,则最后一个分段的“更多分段”为 0,但由于这实际上只是原始消息中间某处的分段,我感觉它应该是 1。
我希望有更多经验的人可以为我阐明这一点。重新组装时是否使用了“更多片段”位?如果是这样,我会想象当片段被分段时,我们不会将最后一个片段设置为 0。
所以算法会:
我的假设在这里正确吗?
sockets - 使用 BSD 套接字对 IPv6 进行分段
我正在为 IPv4 和 v6 编写 PMTUD 应用程序。我在 Ubuntu 12.04 上这样做,但我想让它尽可能独立于操作系统,这就是我偶然发现问题的地方。
默认情况下,IPv6 数据包会被发送方分段,我不知道如何关闭此行为。我找到了一些套接字选项,例如 IPV6_MTU_DISCOVER 和 IPV6_DONTFRAG,但我在 linux/in6.h 下找到了这些选项,这无济于事,因为我使用的是 netinet 标头系列,而且它们都不是在 netinet/in.h 下 - 尽管 IPV6_MTU_DISCOVER 应该是有据此。我错过了什么吗?
编辑:让我澄清一下。我有一个套接字(AF_INET6,SOCK_RAW,IPPROTO_ICMPV6),我希望通过它发送一个这样大小的 ICMPv6 数据包,我会收到一个回复,告诉我它太大了,从那个回复中我会得到路径 MTU。但是,要真正获得整个路径的 MTU,我还必须考虑传出设备的 MTU。
我正在使用 miredo 来隧道 IPv6,它具有一组最小大小的 MTU,例如 1280。发送大于 1280 的数据包将导致所述数据包的碎片(我在 Wireshark 中观察到这种行为),但我需要套接字拒绝发送数据包并通知我,而不是将其分段。
python - 在 Python 中计算内存碎片
我有一个长期运行的过程,不断分配和释放对象。尽管正在释放对象,但 RSS 内存使用量会随着时间的推移而上升。
如何计算发生了多少碎片?一种可能性是计算 RSS / sum_of_allocations 并将其作为指标。即使那样,我该怎么办计算分母(sum_of_allocations)。
view - 使用视图处理 SQL Server 标准版分区情况中的 ID
短背景
大家好。我目前面临的情况是,我需要在 SQL Server 标准版的一个非常大的表上提高性能。该表是事务繁重的,预计会获得更多的事务。
解决方案第 1 部分
我决定使用类似于 Barry King 在这里提出的策略将表分成几个部分。所以我有一堆看起来像下面这样的表格。
我也有相应的视图来处理所有基础表。现在的问题,正如 Barry King 在他的博客文章中所说,是视图中唯一 ID 的处理。由于视图无法处理 ID,因此它们需要存储在表中并且无法利用身份功能。
解决方案第 2 部分
通过像这样创建一个单独的表:
然后在我的程序中使用此代码:
潜在问题
此解决方案的潜在问题是我可能以错误的顺序将值写入 [OriginalTableID]。
假设进程 A 先于进程 B 启动。进程 A 还在进程 B 之前从 PartitionIDHelper 表中获取 ID。然而,进程 B 更快,并且在进程 B 之前写入,导致在进程 A 之前写入我的聚集索引。
然后,进程 A 不会写入索引中的“最佳”位置,因为它是无序的。
潜在的解决方案
那么如何最好地解决这个问题呢?我可以想到两种策略。
- 接受我的聚集索引会稍微出问题
- 将每个表中的本地标识列用于聚集索引。
潜在的解决方案 2 在我看来是一条糟糕的道路,因为除了存储顺序之外,我永远不会将该列用于其他任何事情,因为它永远不会被排序、在 where 子句中使用甚至被选中。
在阅读了 Michelle Ufford 的这篇博文(大部分内容)之后,我倾向于坚持使用略微分散的聚集索引。下面的引用对我提出了一个难题,因为数据主要由单例查询访问,但它是一个插入速度很重要的 OLTP 系统。
我并不是建议您只在标识整数列上创建聚集索引。碎片化虽然通常是不可取的,但主要影响范围扫描查询;单例查询不会有太大影响。即使是范围扫描查询也可以从常规碎片整理工作中受益。然而,集群键的不断增加的属性是需要考虑的,并且在插入速度很重要的 OLTP 系统中尤其重要。
任何和所有的意见和建议将不胜感激!
/塔赫
c - 测试内存碎片
因此,作为我正在学习的操作系统课程的一部分,我实现了一个内存分配器(就像 C 中的 malloc 一样)。可用空间存储在链表中。
我接下来的问题是:我将如何测试各种分配策略(例如,首次拟合、最佳拟合和最差拟合)。现在我只是迭代预定义的次数,每次分配一个大小为 1-N 字节的块,其中 N 类似于 20000。基本上我分配一些迭代然后我通过释放一些分配的块。在退出之前,我检查了 freelist 并计算了外部碎片。我不确定这是否是要走的路,还是有更好的方法来做到这一点?
为每种策略选择随机块大小的一个问题是,如果分配的块大小不同,则无法真正比较它们,对吧?所以替代方案是执行相同的测试,只是现在我在测试每个策略时使用相同的分配大小并释放相同的块。
希望这不会令人困惑:)
jquery - 如何同时使用 HTML5 History/State API 并保持带有主题标签的超链接(文档内的链接)完好无损
我在现有网页中实现了 ajaxify-html5.js 。它使用 jQuery、ScrollTo 和History.js。很棒的东西,效果很好。每个链接都喜欢
在内容窗口中打开,就像它应该的那样。整个事情离完美只有一个问题——当我点击一个使用这样的碎片标识符的链接时:
...地址栏中的 URL 发生了应有的变化,但内容没有任何变化。甚至没有 category?id=5 被加载。
据我所见,这被解雇了(来自 ajaxify-html5.js):
但是 statechange 没有(来自同一个文件):
我想我可以清理每个网址(删除#hashtag),然后一切都会工作......当然除了让新加载的页面定位在哪里<a name="hashtag"></a>
。不幸的是,网站严重依赖这些......
我的问题是:甚至可以将 ajaxify 与碎片标识符一起使用,后者不受第一个影响吗?
linux - 增加块大小时会增加内部碎片吗?
与较大的块大小相比,较小的块大小导致较低的内部碎片。如果允许我们使用典型的块大小值(2 的倍数),即 512、1024 或 2048 字节,与较大的块大小相比,是否有可能以较小的块大小产生更多的内部碎片?
android - Android:通知不适用于 2.3.6(三星 Galaxy y)
已确认以下代码可在运行 HONEYCOMB+ 的设备上正常工作。然而,在三星 Galaxy Y 上,它不会产生任何通知。
笔记 :
- 我在日志中看到“发布队列通知”。
- 我已将
stat_sys_download_done
android sdk 中的可绘制对象复制到我的项目中。
我想不出调试这个问题的方法。我不确定我是否缺少任何东西。任何解决此问题的建议表示赞赏。
c++ - tcmalloc 的分片
我们的软件实现了一个actor模型系统,我们经常分配/释放小对象。我非常确定每个对象都会被销毁而不会发生内存泄漏。(我已经使用 valgrind 和 tcmalloc 工具检查了我的软件中的内存泄漏。没有发现泄漏。)
当我们改用 tcmalloc 替换 glibc 中的 malloc 时,我们发现内存不断增加,直到进程被 OOM(Out of Memory)杀死。然后我们发现 glibc 也有同样的问题,但是增长率低于 tcmalloc。
我使用 malloc_stats() 来显示内存信息
首次执行后(顶部显示 0.96G)'
- MALLOC:960110592(915.6 MB)堆大小
- MALLOC:15886016 (15.2 MB) 应用程序正在使用的字节数
- MALLOC:907419648(865.4 MB)页堆中的可用字节
- MALLOC: 0 ( 0.0 MB) 在页堆中未映射的字节
- MALLOC:27121208(25.9 MB)中央缓存中的可用字节
- MALLOC:151040(0.1 MB)传输缓存中的可用字节
- MALLOC:9532680(9.1 MB)线程缓存中的可用字节
- MALLOC:14275 跨度正在使用中
- MALLOC:27 个线程堆正在使用中
- MALLOC: 7602176 (7.2 MB) 已分配元数据
第 5 次相同执行后(顶部显示 1.2G)
- MALLOC:1173131264(1118.8 MB)堆大小
- MALLOC:18001048(17.2 MB)应用程序正在使用的字节
- MALLOC:1082458112(1032.3 MB)页堆中的可用字节
- MALLOC:21168128(20.2 MB)字节未映射到页堆中
- MALLOC:37992328(36.2 MB)中央缓存中的可用字节
- MALLOC:252928(0.2 MB)传输缓存中的可用字节
- MALLOC:13258720(12.6 MB)线程缓存中的可用字节
- MALLOC: 17651 使用中的跨度
- MALLOC:27 个线程堆正在使用中
- MALLOC: 8126464 (7.8 MB) 已分配元数据
我们可以从这样的数据中看出。在第 5 次相同的行为之后,我们的软件中只使用了 17.2。但是 tcmalloc 持有 1.1G 内存,不返回系统。当然,tcmalloc 持有那些内存也没关系。但是当我们的程序被OOM杀死时它会不断增加(实际使用的内存小于1G)。
我们怀疑它与堆碎片有关。有人有经验可以和我们分享吗?我想我的情况和 https://bugzilla.redhat.com/show_bug.cgi?id=843478一样
非常感谢。