物理内存

20190923-10Linux进程线程类 000 018

懵懂的女人 提交于 2019-11-30 06:36:02
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。 ps 查看 当前系统进程状态 ps:process status 进程状态 1. 基本语法 ps aux | grep xxx (功能描述:查看系统中所有进程) ps -ef | grep xxx (功能描述 : 可以查看子 父 进程之间的关系) 2. 选项说明 表 1-35 选项 功能 -a 选择所有进程 -u 显示所有用户的所有进程 -x 显示没有终端的进程 3. 功能说明 ( 1 ) ps aux 显示信息说明 USER :该进程是由哪个用户产生的 PID :进程的 ID 号 %CPU :该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源; %MEM :该进程占用物理内存的百分比,占用越高,进程越耗费资源; VSZ :该进程占用虚拟内存的大小,单位 KB ; RSS :该进程占用实际物理内存的大小,单位 KB ; TTY :该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端, tty1-tty6 是本地的字符界面终端, tty7 是图形终端。 pts/0-255 代表虚拟终端。 STAT :进程状态。常见的状态有: R :运行、 S :睡眠、 T :停止状态、 s :包含子进程、 + :位于后台 START :该进程的启动时间 TIME

【转帖】Linux 内核系统架构

孤街浪徒 提交于 2019-11-30 06:21:18
Linux 内核系统架构 描述Linux内核的文章已经有上亿字了 但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的。 即使看了所有的Linux 内核文章,估计也还不是很明白,这时候,还是需要fucking the code. 28年前(1991年8月26日)Linus公开Linux的代码,开启了一个伟大的时代。这篇文章从进程调度,内存管理,设备驱动,文件系统,网络等方面讲解Linux内核系统架构。Linux的系统架构是一个经典的设计,它优秀的分层和模块化,融合了数量繁多的设备和不同的物理架构,让世界各地的内核开发者能够高效并行工作。先来看看Linus在多年前公开Linux的邮件。 "Hello everybody out there using minix - I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I’d like any feedback on things people like/dislike in minix, as my OS

Linux内存描述之高端内存–Linux内存管理(五)

那年仲夏 提交于 2019-11-30 05:52:49
服务器体系与共享存储器架构 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 http://blog.csdn.net/vanbreaker/article/details/7579941 #1 前景回顾 前面我们讲到 服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA) #1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 UMA模型 物理存储器被所有处理机均匀共享。所有处理机对所有存储字具有相同的存取时间,这就是为什么称它为均匀存储器存取的原因。每台处理机可以有私用高速缓存,外围设备也以一定形式共享。 NUMA模型 NUMA模式下,处理器被划分成多个"节点"(node), 每个节点被分配有的本地存储器空间。 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。 ##1.2 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述

linux tomcat jvm内存优化

China☆狼群 提交于 2019-11-30 05:00:50
PermGen space:全称是Permanent Generation space。就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域 Heap space:存放Instance。 GC(Garbage Collection)应该不会对PermGen space进行清理 所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误 Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不 讨论 该区。 JVM的Heap分配可以使用-X参数设定, -Xms 初始Heap大小 -Xmx java heap最大值 -Xmn young generation的heap大小 JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。 为什么一些程序频繁发生GC?有如下原因: l 程序内调用了System.gc()或Runtime.gc()。 l 一些中间件软件调用自己的GC 方法

linux top 命令各参数详解

孤街醉人 提交于 2019-11-30 03:24:45
简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. 下面详细介绍它的使用方法。 参数含义 top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 191272k total, 173656k used, 17616k free, 22052k buffers Swap: 192772k total, 0k used, 192772k free, 123988k cached PID

Tomcat中JVM内存溢出及合理配置

自作多情 提交于 2019-11-29 23:33:44
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。 一、Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的 内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中,它和堆不同,运行期内GC不 会释放其空间。 (1). 堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。可以利用JVM提供的-Xmn -Xms

【转】内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages

有些话、适合烂在心里 提交于 2019-11-29 20:49:32
转自:https://www.cnblogs.com/yfz0/p/5829443.html 在内核模块中申请分配内存需要使用内核中的专用API:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages;当然,设备驱动程序也不例外; 对于提供了MMU功能的处理器而言,Linux提供了复杂的内存管理系统,使得进程所能访问到的地址空间可以达到4GB;而这4GB的空间又被划分为两个部分:0GB~3GB(PAGE_OFFSET,x86中的值是0xC0000000)的区域被用作进程的用户空间,3GB~4GB的区域被用作内核空间; 在内核空间中,从3GB到vmalloc_start之间的这段地址区域作为物理内存映射区使用,该段映射区域内包含了内核镜像、物理页框表mem_map等等,比如,我们使用的系统物理内存为160MB,那么,3GB~3GB+vmalloc_start之间的区域就应该是映射的物理内存;在物理内存映射区域之后,就是虚拟内存vmalloc区域;对于160MB的系统而言,vmalloc_start的位置就应该在3GB+160MB位置附近(在物理内存映射区与vmalloc_start位置之间还存在一个8M的gap来防止越界),vmalloc_end的位置接近4GB的位置(系统会在最后的位置处保留一片128KB大小的区域专用于页面映射); 一

如何用C#实时获取CPU利用率

偶尔善良 提交于 2019-11-29 18:19:22
原文: C#获取CPU和内存使用率 获取内存使用率 方式1: using System; using System.Runtime.InteropServices; namespace ConsoleApp1 { public class Class1 { static void Main(string[] args) { Console.WriteLine("总内存:" + FormatSize(GetTotalPhys())); Console.WriteLine("已使用:" + FormatSize(GetUsedPhys())); Console.WriteLine("可使用:" + FormatSize(GetAvailPhys())); Console.ReadKey(); } #region 获得内存信息API [DllImport("kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi); //定义内存的信息结构 [StructLayout(LayoutKind.Sequential)] public struct MEMORY_INFO { public uint

JVM参数查看与设置

你说的曾经没有我的故事 提交于 2019-11-29 16:18:15
1 JVM内存管理的机制 1.1 堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。 可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的, 所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。 1.1.1 堆内存分配 JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制; 空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。 说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。 1.1.2 非堆内存分配 JVM使用-XX

如何用C#实时获取CPU利用率

自古美人都是妖i 提交于 2019-11-29 13:28:35
获取内存使用率 方式1: using System; using System.Runtime.InteropServices; namespace ConsoleApp1 { public class Class1 { static void Main(string[] args) { Console.WriteLine("总内存:" + FormatSize(GetTotalPhys())); Console.WriteLine("已使用:" + FormatSize(GetUsedPhys())); Console.WriteLine("可使用:" + FormatSize(GetAvailPhys())); Console.ReadKey(); } #region 获得内存信息API [DllImport("kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi); //定义内存的信息结构 [StructLayout(LayoutKind.Sequential)] public struct MEMORY_INFO { public uint dwLength; //当前结构体大小