当前位置:首页 > 内存 > 正文

linux内存使用率怎么算(linux内存占用率命令)

  • 内存
  • 2024-04-28 19:49:38
  • 9222

一、

尝试获取URL时出现以下错误:


二、如何查看Linux下进程的IO活动状况00Hey,Linux您好,很高兴回答您的问题。服务器CPU占用率不高,负载比较高,所以检查IO。硬盘IO可以通过vmstat或者iostat命令获取(也可以使用yum安装dstat),网络IO可以通过iftop命令获取。但不知道哪个进程使用了​​比较高的硬盘IO。通过搜索找不到相关命令,只好自己写一个脚本来处理统计。本脚本已在CentOS6(kernel2.6及以上)中通过python2.6测试。直接运行脚本,默认采集3秒数据,显示读写次数最多的前3个进程。如果想使用参数,可以使用命令“453”。第一个数字是每次收集读写数据之间的秒数。第二个数字打印读取和写入次数最多的n个进程。写。第三个数字是脚本运行的次数。因为参数部分写起来比较简单,所以三个参数都要写。。#!/bin/python#-*-coding:utf-8-*-#文件名:ind_high_io_process#修订版:1.0#日期:2013-3-8#作者:simonzhang#web:###ENDINITINFOimportosimportreimportsysimporttimefromstringimportstrip####sys_proc_path='/proc/'re_find_process_number='^\d+$'######通过/proc/$pid/io####defcollect_info()获取读写信息:_tmp={}re_find_process_dir=_find_process_number)r(sys_proc_path):ifre_find_process_(i):#获取进程名process_name=open("%s%s/stat"%(sys_proc_path,i),"rb").read().split("")[1]#读取信息iorw_io=open("%s%s/io"%(sys_proc_path,i),"rb").readlines()for_infoinrw_io:cut_info=strip(_info).')ifstrip(cut_info[0])=="read_bytes":read_io=int(strip(cut_info[1]))ifstrip(cut_info[0])=="write_bytes":write_io=int(strip(cut_info[1])))_tmp[i]={"name":process_name,"read_bytes":read_io,"write_bytes":write_io}return_tmpdefmain(_sleep_time,_list_num):_sort_read_dict={__sort_write_dict={}#获取系统读写数据process_info_list_frist=collect_info()(_sleep_time)process_info_list_second=collect_info()#将读写数据分组并写入到两个字典中forloopinprocess_info_list_():second_read_v=process_info_list_second[loop]["read_bytes"]second_write_v=process_info_list_second[loop]["write_bytes"]try:frist_read_v=process_info_list_frist[loop]["read_bytes"]except:frist_read_v=0try:frist_write_v=process_info_list_frist[loop]["write_bytes"]except:frist_write_v=0#计算第二次得到数据字段结果差值第一次取数据之间_sort_read_dict[loop]=second_read_v-frist_read_v_sort_write_dict[loop]=second_write_v-frist_write_v#对读写数据进行排序sort_read_dict=sorted(_sort_read_(),key=lambda_sort_read_dict:_sort_read_dict[1],reverse=True)sort_write_dict=sorted(_sort_write_(),key=lambda_sort_write_dict:_sort_write_dict[1],reverse=True)#打印统计结果print"pidprocessread(bytes)pidprocesswrite(btyes)"for_numinrange(_list_num):read_pid=sort_read_dict[_num][0]write_pid=sort_write_dict[_num][0]res="%s"%read_pidres+=""*(8-len(read_pid))+process_info_list_second[read_pid]["name"]res+=""*(12-len(process_info_list_second[read_pid]["name"]))+"%s"%sort_read_dict[_num][1]res+=""*(12-len("%s"%sort_read_dict[_num][1]))+write_pidres+=""*(8-len(write_pid))+process_info_list_second[write_pid]["name"]res+=""*(12-len("%s"%process_info_list_second[write_pid]["name"]))+"%s"%sort_write_dict[_num][1]printresprint"\n"*1if__name__=='__main__':try:_sleep_time=[1]除了:_sleep_time=3try:_num=[2]except:_num=3try:loop=[3]except:loop=1foriinrange(int(loop)):main(int(_sleep_time),int(_num))如果您满意,请点击【接受答案】,如果您还有疑问,请点击【提问】。希望我的回答对您有用,希望您采纳!~O(∩_∩)O~


三、Linux进程内存管理?对于带有MMU的处理器,Linux系统提供了复杂的存储管理系统,允许进程访问高达4GB的内存。在Linux系统上,一个进程的4GB内存空间分为两部分:用户空间和内核空间。用户空间中的地址通常分布在0到3GB之间(即PAGE_OFFSET,相当于Ox86中的OxC0000000),其余3到4GB通常只能由用户空间中的虚拟地址访问。无法访问内核空间。用户进程只能通过系统调用(代表用户进程运行在内核模式)来访问内核空间。
各个进程的用户空间完全独立,互不相关。每个用户进程都有不同的页表。内核空间由内核映射,是固定的,不会跨进程改变。内核空间中的虚拟地址到物理地址的映射是由所有进程共享的,并且内核的虚拟空间独立于其他程序。
Linux的1GB内核地址空间分为物理内存映射区、虚拟内存分配区、高级页映射区、私有页映射区和系统保留映射区。
对于x86系统,一般情下,物理内存映射区域的最大长度为896MB,系统的物理内存依次映射到内核空间的这个区域。如果系统物理内存大于896MB,超出物理内存映射区域的部分内存称为高级内存(不超出物理内存映射区域的内存通常称为内核内存)。访问高级内存时,必须将其映射到高级页映射区域。Linux在内核空间顶部保留了FIXADDR_TOP~4GB区域作为保留区域。
如果您的系统物理内存超过4GB,则必须使用CPU的扩展分页(PAE)模式提供的64位页目录项来访问4GB以上的物理内存,这需要CPU的支持。具有PAE功能的IntelPentiumPro和更高版本的CPU可以配置高达64GB的内存,并具有36位物理地址空间寻址。
对于32位x86,可以看到在3到4GB之间的内核空间中,从低地址到高地址的顺序是物理内存映射区→隔离区→vmalloc虚拟内存分配器区→隔离区。→高级内存映射区→特殊页映射区→保留区。