正如大部分实内存可用来缓冲文件一样,系统的页面空间可由那些强制排除在 RAM 外的程序工作数据用作临时存储器。
假设您有一个程序,它很少或几乎不读取数据,可是却显示出 I/O 依赖性症状。更糟的是,实际时间占用户与系统时间之和的比率并不随连续运行而增加。程序可能是有内存限制的,并且它的 I/O 是针对调页空间的,也可能来源于此。检查这种可能性的方法显示在以下的
vmstatit shell 脚本中:
vmstat -s >temp.file # cumulative counts before the command
time $1 # command under test
vmstat -s >>temp.file # cumulative counts after execution
grep "pagi.*ins" temp.file >>results # extract only the data
grep "pagi.*outs" temp.file >>results # of interest
vmstatit 脚本总结了内容较多的 vmstat -s 报告,该报告提供了自系统启动以来大量系统活动的累积计数。
如果 shell 脚本如下执行:
# vmstatit "cp file1 file2" 2>results
结果如下:
real 0m0.03s
user 0m0.01s
sys 0m0.02s
2323 paging space page ins
2323 paging space page ins
4850 paging space page outs
4850 paging space page outs
调页统计信息前后相同,证实了我们对
cp 命令不受页面调度限制的看法。
vmstatit shell 脚本的一个扩展变量可以用来显示真实情况,如下:
vmstat -s >temp.file
time $1
vmstat -s >>temp.file
echo "Ordinary Input:" >>results
grep "^[ 0-9]*page ins" temp.file >>results
echo "Ordinary Output:" >>results
grep "^[ 0-9]*page outs" temp.file >>results
echo "True Paging Output:" >>results
grep "pagi.*outs" temp.file >>results
echo "True Paging Input:" >>results
grep "pagi.*ins" temp.file >>results
因为操作系统中的文件 I/O 是通过 VMM 处理的,所以
vmstat -s 命令将普通程序 I/O 报告为页面调进和页面调出。当
vmstatit shell 脚本的早期版本针对最近未读取的大文件的
cp 命令运行时,结果如下:
real 0m2.09s
user 0m0.03s
sys 0m0.74s
Ordinary Input:
46416 page ins
47132 page ins
Ordinary Output:
146483 page outs
147012 page outs
True Paging Output:
4854 paging space page outs
4854 paging space page outs
True Paging Input:
2527 paging space page ins
2527 paging space page ins
time 命令的输出证实了 I/O 相关性的存在。页面调进的增加显示了为满足 cp 命令必需的 I/O。页面调出的增加表明文件足够大,能从内存进行脏页(未必是它自身)的强制写入。没有累积调页空间 I/O 计数的变化的事实证明 cp 命令不会构建大到足以使测试机器的内存过载的数据结构。
该版本的 vmstatit 脚本报告 I/O 的顺序是有意图的。典型程序读文件输入,然后写文件输出。另一方面,页面调度活动通常从写出不合适的工作段页面开始。只有当程序试图访问时页面才会被读回。自系统引导以来,测试系统经历的调页空间页面调出几乎是调页空间页面调进的两倍,这一事实表明至少有一些运行于该系统的程序已将数据保存在程序结束之前不会再次访问的内存中。内存限制程序提供了更多信息。另请参阅内存性能。
为了显示内存限制对这些统计信息的影响,下面的示例观察有足够内存(32 MB)的环境下的某个给定命令,然后用
rmss 命令人为收缩系统(请参阅
使用 rmss 命令进行内存需求评估)。以下命令序列
# cc -c ed.c
# vmstatit "cc -c ed.c" 2>results
先在内存中预先准备好 7944 行的源文件和 C 编译器的可执行文件,然后评测第二步执行的 I/O 活动:
real 0m7.76s
user 0m7.44s
sys 0m0.15s
Ordinary Input:
57192 page ins
57192 page ins
Ordinary Output:
165516 page outs
165553 page outs
True Paging Output:
10846 paging space page outs
10846 paging space page outs
True Paging Input:
6409 paging space page ins
6409 paging space page ins
显然,不存在 I/O 限制。甚至没有读源代码必需的任何 I/O。如果接下来发出下列命令:
# rmss -c 8
将机器的有效大小更改为 8 MB,然后执行相同顺序的命令,会得到下面的输出:
real 0m9.87s
user 0m7.70s
sys 0m0.18s
Ordinary Input:
57625 page ins
57809 page ins
Ordinary Output:
165811 page outs
165882 page outs
True Paging Output:
11010 paging space page outs
11061 paging space page outs
True Paging Input:
6623 paging space page ins
6701 paging space page ins
下面列示了 I/O 相关性的症状:
- 使用的时间比总 CPU 时间长
- 在第 n 次执行命令时有大量常规 I/O
使用的时间比无内存限制的情况下还要长以及大量调页空间 I/O 的存在,这一事实阐明了编译器受到不足内存的妨碍。
注: 该示例说明了内存限制的影响。由于没有努力减少其他进程的内存使用,所以在这种环境下强制编译器调页的绝对大小是没有意义的评估。
为避免在下次重新启动之前使用经人为缩减的机器,请运行:
# rmss -r
来将 rmss 命令隔离的内存释放回操作系统,从而将系统恢复至通常容量。
相关推荐
面对“打开Excel提示内存或磁盘空间不足”的问题,首先应排查内存和磁盘空间是否充足,并采取相应的优化措施。同时,也要关注Excel文件本身的状态,确保其完整性和兼容性。通过上述方法,大多数情况下都能够有效解决...
建立内存文件系统 在内存中建立一个虚拟磁盘; 建立文件系统; 设计合理的数据结构,管理虚拟磁盘中已分配和未分配的盘块; 设计相应的目录结构,文件控制块等来管理系统中的文件; 实现文件的创建,删除,移位和...
本文将深入探讨虚拟磁盘的概念、如何通过Windows的CMD命令来操作它,以及与之相关的序列化、反序列化和通配符等技术。 首先,虚拟磁盘的核心是其内存中的存储模型。它创建了一个逻辑磁盘的映像,用户可以像对待普通...
linux获取cpu、磁盘、内存占用率代码
ramdisk虚拟内存磁盘
但是,这种虚拟磁盘的缺点是断电或重启后数据将丢失,因为它不持久化到硬盘上。 实现内存中的虚拟磁盘,我们可以使用DOS命令中的`SUBST`。`SUBST`命令允许我们将一个现有的文件夹映射为一个驱动器号,从而将其虚拟...
对于系统签名的应用,由于它们具有更高的权限,可以访问更多系统信息,如`/sys/class`和`/sys/devices`下的文件,这些通常包含有关CPU、内存和磁盘的详细硬件信息。但这样的权限通常只授予系统应用或经过特殊签名的...
在使用Excel2016时,有时可能会遇到一个令人头疼的问题:当尝试打开一个新的空白文档或其他已存在的Excel文件时,软件会提示“内存或磁盘空间不足”,并表明Microsoft Excel无法再次打开或保存任何文档。这种情况...
内存虚拟磁盘是一种高效的技术,尤其对于32位X86系统来说,它能解决超过4GB内存无法充分利用的问题。在32位操作系统中,由于地址空间限制,超过4GB的物理内存并不能全部映射到应用程序,导致部分硬件资源被浪费。...
磁盘IO问题通常出现在高负载或者数据密集型应用中,表现为磁盘访问速度变慢或系统响应延迟。这类问题往往会影响到整体系统的性能和稳定性。 #### 二、磁盘IO问题分析方法 1. **磁盘空间不足** - **解决策略**:...
在磁盘文件最优存储问题中,...总的来说,解决磁盘文件最优存储问题需要深入理解文件系统、内存管理以及算法设计。通过C++实现,我们可以创建一个灵活且高效的解决方案,以优化磁盘空间的使用,提高系统的整体性能。
本文将深入探讨如何使用C++编程语言来模拟内存分配与回收,并结合磁盘文件操作进行实践。 内存分配是程序运行时为变量、对象或数据结构分配空间的过程。在C++中,这通常涉及到堆(heap)和栈(stack)的管理。栈...
磁盘的读写速度与磁头移动到目标位置的距离有关,因此,数据的物理位置对性能有很大影响。 磁盘文件的最优存储策略通常包括以下几个方面: 1. **数据布局**:为了提高读取效率,应将相关性强的数据放在一起,这样...
4. **延迟加载与需求分页**:当访问文件未加载的部分时,操作系统会自动加载相应的磁盘页,实现了按需加载。 ### 实现方式 在Windows系统中,可以使用`CreateFileMapping`函数创建一个映射对象,然后使用`...
sysbench进行cpu,磁盘IO,内存,OLTP基准测试, 一sysbench-05安装 二用法下面的测试案例需要用到这些说明才能看的懂的 三开始测试 cpu性能测试 线程测试 磁盘IO性能测试 内存测试 OLTP测试
一个非常小并且实用的虚拟磁盘/内存盘/光驱绿色工具! 随身携带必备软件之一! 驱动内核映像只占4K(32位)/8K(64位)内存! 当退出程序,并且没有虚拟设备时,驱动会自动卸载! 注: 不支持 Vista x64 位系统, 因为驱动...
labview 小程序,利用labview查询硬盘的剩余空间容量。
这包括内存、CPU、磁盘I/O等关键性能指标。本文将详细介绍如何通过Shell脚本来获取这些信息。 一、内存信息 在Linux中,我们可以使用`free`命令来查看内存的状态。`free -h`会以人类可读的格式显示总内存、已用...
1. **数据收集**:可以使用如`netstat`(网络)、`top`或`vmstat`(CPU和内存)、`iostat`(磁盘)等内置Linux命令来获取系统实时信息。另外,`/proc`目录下的文件也提供了丰富的系统状态信息。 2. **日志记录**:...
本程序能够监控LINUX服务器的内存、磁盘、CPU使用情况 1、需要配置一台FTP服务器,可以LINUX服务器中搭建一个FTP服务即可。 2、监控的服务器需要与FTP服务器网络连通。 3、需要修改...