Questions tagged «memory-management»

内存管理是在系统级别管理计算机内存的行为。标有“内存管理”的问题可以涵盖应用程序和操作系统

5
当仍有“非活动”内存时,如何禁止Mac OS X使用交换功能?
在OS X的日常使用中(根据互联网上各种帖子的说法,这是一种常见现象),只要没有“可用”内存可用,该系统就会变慢。据推测,这是由于交换引起的,因为明显有大量磁盘活动,并且vm_stat报告了许多页面输出。(纠正我的错误) 但是,交换开始/发生/结束时,“非活动”内存的数量通常约为所有可用内存的12.5%-25%(^ 1。)。 根据http://support.apple.com/kb/ht1342: 无效的内存 内存中的该信息并未得到积极使用,但是最近才被使用。 例如,如果您一直在使用Mail,然后退出它,则Mail所使用的RAM被标记为非活动内存。此闲置内存可供其他应用程序使用,就像可用内存一样。但是,如果在其他应用程序使用其非活动内存之前打开邮件,则Mail将打开得更快,因为其非活动内存已转换为活动内存,而不是从速度较慢的硬盘加载邮件。 并且根据http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html进行: 非活动列表包含当前驻留在物理内存中但最近未访问过的页面。这些页面包含有效数据,但可以随时从内存中释放。 因此,基本上:程序退出后,其内存将被标记为“不活动”,并且应随时可以声明。尽管如此,每当“可用”内存变低时,OS X仍希望开始将内存换出到Swap文件中,而不是仅声明该内存。 为什么?比起立即释放不活动的内存甚至不触摸交换文件,此行为的优点是什么?一些消息来源(^ 2。)表示OS X会在释放它之前调出“非活动”内存以进行交换,但是如果现在可以随时从内存中释放内存,那现在变得没有意义了吗?交换很昂贵,发布很便宜,对吧? 可以使用某些首选项或已知的技巧来更改此行为吗?(最好不要完全禁用swap / dynamic_pager并重新启动...) 我确实感谢purge命令以及修复磁盘权限以强制使用一些可用内存的概念,但是与真正解决交换/释放决策逻辑相比,这是痛苦地强制使用更多可用内存的方法... 顺便说一句类似的问题在这里问:http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/这里:HTTP://hintsforums.macworld .com / showthread.php?t = 87688,但是即使OP重新提出了核心问题,也没有任何答复能解决该问题的答案... ^ 1。更新2012年3月17日自从我第一次发布此问题以来,我的内存已从4gb变为8gb,问题仍然存在。以前,“非活动” ram的数量为0.5gb-1.0gb,现在在交换开始/发生/结束时通常约为1.0-2.0GB,即osx似乎将大约12.5%-25%的ram保留为“非活动”内核逻辑。 ^ 2。例如https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work-日: 一旦使用完所有内存(可用内存为0),操作系统就会将非活动内存写出到交换文件中,以在活动内存中留出更多空间。 更新2012年3月17日 这是到目前为止建议的一些方法的综述: 所述吹扫命令 “用于通过冷盘缓冲区高速缓存来近似初始启动条件以进行性能分析。它不会影响通过malloc,vm_allocate等分配的匿名内存。” 这对于防止osx换出磁盘缓存很有用(这很荒谬,osx实际上是这样做的),但缺点是释放了磁盘缓存,这意味着如果磁盘缓存不打算换出后,最终只会得到一个冷盘缓冲区高速缓存,可能会对性能产生负面影响。 该FreeMemory应用程序和/或修复磁盘权限,迫使一些免费存储 无济于事地释放任何内存,仅将GB的内存内容从ram移动到hd。最后,当我尝试使用释放内存时打开的应用程序时,这会导致大量交换,因为它的许多虚拟机现在都处于交换状态。 使用dynamicpagerwrapper加速交换分配 为了加快交换使用速度似乎是一件好事,但是在内存仍然处于非活动状态时,首先没有解决osx交换的问题。 通过禁用dynamicpager并重新启动来禁用交换 使用所有内存时,这将迫使osx不使用swap来挂起系统挂起的价格。并非可行的选择... 使用被入侵的dynamicpager禁用交换 类似于禁用上面的dynamicpager一样,从博客评论的摘录中可以看出,这不是可行的解决方案:“非活动内存与往常一样高”。“当系统内存不足时,整个操作系统会挂起...”,“如果您消耗了mac的全部内存,则计算机可能会挂起” 总结起来,当内存仍然处于“非活动”状态时,我仍然不知道如何禁止Mac OS X使用交换功能。如果不可能,那么至少在某种程度上可以解释为什么osx倾向于换出可能随时从内存中释放的内存?

5
是否可以更早地干预OOM杀手?
我尝试将开发系统调整为最大的可靠性。我禁用了交换功能,因为对于GUI使用,它主要使计算机无响应,从而不再可用。但是,如果攻击性的应用吞噬了内存,那么似乎有一些机制可以提高速度,从而最大限度地利用内存。没有硬盘交换操作,但是系统同样没有响应。因此,我想让OOM杀手kick脚,然后系统对内存增益进行任何特殊的努力。例如,如果可用物理内存少于100 MB,是否可以配置OOM杀手执行操作?

6
L1,L2和L3缓存在计算机中的确切位置?
L1,L2和L3缓存在计算机中的确切位置? 我知道,我们使用缓存来提高性能,方法是从缓存而不是主内存中选择数据和指令。 以下是我的问题 L1缓存到底位于何处?。是在CPU芯片上吗? L2高速缓存到底位于何处? L3缓存到底位于何处?在主板上? 我认为最新的SMP处理器使用3级缓存,因此我想了解缓存级层次结构及其体系结构。


2
在Windows 8.1中,有没有一种方法可以确保在RAM不足时不是第一个被杀死的进程?
我编写了一个.NET 4.5应用程序,该程序可以缓冲Kinect v2中的颜色,红外和深度数据,对其进行一些处理,然后以未压缩的形式将其转储到磁盘中。.NET应用程序还将ffmpeg作为子进程启动,并将颜色数据通过管道传递给它,以编码为H.264。 因为我没有使用SSD,所以视频数据的到达速度比我写入磁盘的速度更快。但这没关系,当我的RAM不足时,我可以丢弃视频帧。我唯一的要求是,无论我保持什么,都是连续的8到10秒的视频块。因此,当我没有足够的RAM来缓冲连续8到10秒的视频(大约1.5到2 GB)的视频时,我在.NET 4.5应用程序中添加了一些逻辑以开始丢弃视频帧。 而且,为防止页面抖动,我已完全禁用页面文件。这给我留下了总共16 GB的物理RAM。 我的问题是,即使采用了这种机制,当Windows 8.1内存不足时,有时我的.NET应用程序或ffmpeg子进程仍然会被杀死,因为显然,当我的应用程序具有大量的视频数据积压时,我的应用程序将使用最多的RAM写入磁盘。有没有办法告诉Windows我的进程比其他进程更重要,以便Windows首先开始杀死其他不那么重要的进程?

1
交换时增加Linux上的桌面响应能力
到目前为止,我测试过的所有GNU / Linux发行版都存在一个问题,即当填满ram且系统开始交换时,整个桌面和图形用户界面都变得无响应,以至于有时我不得不等待大约5-10秒移动了物理鼠标,直到鼠标指针实际移动为止。 这是一种令人讨厌的行为,尤其是在低内存的系统上。 有什么方法可以赋予某些应用程序/作业(例如桌面环境等)比其他应用程序更高的优先级,使其在ram中停留,从而使实际占用所有内存的应用程序在桌面环境等之前被交换? 编辑: 我说的是使用整个RAM的情况,因此如果未禁用它,它将始终开始交换(我不希望进程被随机杀死)。我不仅在低内存环境中遇到此问题,在台式机上还存在内存8GiB的问题,部分原因是由于许多虚拟机,部分原因是内存泄漏。ZRAM也不是解决方案,因为它只会延迟问题。对于这个问题,我能想到的唯一解决方案是某些用户空间实用程序或内核API,该实用程序或内核API可以防止某些作业完全被交换,或者至少使其变得不太可能。是否有人知道其他解决方案或对现有或正在计划中的此类工具或API有所了解? 第2次编辑: 根据https://aur.archlinux.org/packages/ulatencyd-git/和https://wiki.archlinux.org/index.php/Ulatencyd的说法,ulatencyd似乎不适用于较新版本的systemd 。这可能是因为,如果我正确理解的话,systemd从用户空间的角度接管了cgroup的完全控制权。


1
OS X中的有线内存与活动内存
我在理解OS X中的有线内存和活动内存之间的区别时遇到了麻烦。 不要谈论四种类型的内存(不要谈论空闲或不活动的内存,因为我已经知道它们是什么了)。只需将有线内存与活动内存进行比较和对比,这样我就可以更好地理解这两者。

1
linux缓存哪些文件?
我了解linux使用未使用的RAM来保留一些文件。但是我不知道它实际上缓存了哪些文件!如果您看一下free: Gesamt Belegt Frei Gemeinsam Puffer Cached Speicher: 5,8G 3,7G 2,1G 0B 259M 1,7G -/+ Puffer/Cache: 1,8G 4,0G Auslagerungsdatei: 4,0G 0B 4,0G 它说我的1.7 GB RAM被用作缓存。我知道这不是有害行为,但是我对Linux认为值得缓存的文件感到好奇。是否有命令/文件向我显示缓存的文件?




1
如何配置Firefox以假设我的内存较少?
Firefox有一些不同的设置可以根据系统内存自动调整。如果你除了Firefox之外什么也没有运行,这一切都很棒,但是当你同时运行六个应用程序并且他们都认为他们可以获得相当大的内存时它只会杀死这个盒子。 示例设置: http://kb.mozillazine.org/Browser.sessionhistory.max_total_viewers http://kb.mozillazine.org/Browser.cache.memory.capacity 我如何让Firefox自动配置所有这些设置,假设我只有512MB内存而不是4GB(或者任何数字,但你明白了)。 我用Firefox 14运行Ubuntu 12.04 目前的解决方法: 运行具有512MB RAM的Windows XP虚拟机。 它实际上运行顺畅,运行的内存较少(包括Windows)比独立运行Firefox(或Chrome)。 安装32位版本的Firefox 通过安装32位版本的firefox(apt-get install firefox:i386),基本内存使用率仅为64位版本的50%左右。


2
如何在Linux上激活swap? “swapon -a”似乎不起作用?
我的电脑有相当多的内存(6GB),足以满足我的大部分需求。过了一会儿,我正在弄乱我的交换,打开和关闭它 sudo swapon -a 和 sudo swapoff -a。在最后我必须让它关闭,因为我现在似乎有0MB的交换。 通常没有问题,但我现在正在运行一些重要的分析,现在使用大约5GB的交换和增长。所以为了避免分析终止,我想再次打开我的交换。所以我跑了“sudo swapon -a”,但不幸的是,这会导致: swapon: /dev/mapper/cryptswap1: stat() has failed: File or folder does not exist. (我将输出从荷兰语翻译成英语,所以单词可能会略微偏离)。 有人知道如何再次启用我的交换吗?由于我不想暂停我的分析,因此在机器运行时我可以做到这一点当然非常重要。 [编辑]我在Ubuntu 12.04上,我的fstab的内容如下: # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc nodev,noexec,nosuid 0 0 # / was on /dev/sda1 during installation UUID=f2ef1c1b-f606-44ed-9405-979fb6fa8ca4 / …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.