使用 gdb 工具可以 dump 指定地址范围的内存,该操作会影响服务,需注意dump的内存块大小,慎用。以下命令的含义是dump 指定进程 13618 起始地址为0x7ffc0508b000,结束地址为 0x7ffc0508b000 加上偏移量 132000 的内存,并将其保存到 199.dump 文件中
gdb --batch --pid 13618 -ex "dump memory 199.dump 0x7ffc0508b000 0x7ffc0508b000+132000"
内存起始地址可以使用 pmap 命令查看,Address字段即为内存地址,但是要注意需要将地址高位的 0 换成0x开头,比如 dump 以上 0000000000400000 开始,0000000000600000 结束的内存,需要转化成 0x400000 0x600000 或者使用偏移量方式 0x400000 0x400000+4000
dump 出来的文件其实是二进制形式的,直接查看就是一堆乱码,可以使用 strings -n 10 199.dump 查看 10 个字符以上的内存内容
- 其实即便到这一步也很难看出来有用的信息,后续可以借助
perf工具继续排查。使用 perf record -g -p <pid> 开启监控栈函数调用,运行一段时间后 Ctrl+C 结束,会生成一个文件perf.data,执行perf report -i perf.data查看报告
(1)通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。
(2)线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。
(3)进程间相互独立,同一进程的各线程间
一、什么是共享内存
顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
特别提醒:共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取。所以我们通常需要用其他的机
(1)ps -p {pid} -T 可以得到该进程里面运行的各线程的id(表现出来是spid)、对应的线程名称(不超过16字符)、运行时间等;你可以把这个目录下的信息理解为Linux内核在执行你写的程序时所打印的Log。下,因此你可以通过查看这个目录下的信息来或者进程的运行时行为,这对于那些好奇内核是如何运行程序的同学是非常重要的。下记录了每个进程运行时的所有关键信息,那这些信息是谁来生成的呢,答案是Linux内核。Linux内核在执行你写的程序时,将所有关键信息写到了。
内核把物理页作为内存管理的基本单位,尽管处理器的小可寻址单位通常为字节,但是MMU(内存管理单元,管理内存并把虚拟地址转换为物理地址的硬件)通常以页作为单位进行处理。大多数32位体系结构支持4KB的页,内核用struct page结构表示系统的物理页,这个page与物理页相关,而并非与虚拟页相关。页的拥有者可能是用户空间进程、动态分配的内核数据、静态内核代码或页高速缓存等。
由于有些页位于内存特定的物理地址上,所以不能将其用于一些特定的任务。故内核把页分成不同的区,分别是ZONE_DMA、ZONE_DMA32、ZONE_NORMAL和ZONE_HIGHMEM(高
Linux下提供了多种共享内存的通讯机制,常用的就是socket,但是socket通讯使用简单,但性能不佳,最优的方式还是共享内存方式。本章分享封装库,的就是基于共享内存实现的。
本分享库是基于Ubuntu16.04编译的,如需其它平台编译库可以发邮件至:512146329@qq.com
设计的要求:
1:使用进程间的互斥锁,实现了共享内存共享数据的互斥访问问题
2:有效数据部分,通过分配器来管理内存的开辟和释放
3:实现了一对多的模型(一端发送,多端接收的模型)
在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内...
点击上方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排...
先查看自己的电脑能不能装内存条,该装什么型号的内存条,这是必要的:
打开任务管理器------>选择性能------>选择内存------>查看已使用卡槽和速度
如图所示,我的卡槽已经装满了,就不能再装内存条了,内存条也分型号,速度就是判断依据
判断电脑最大能装多少G
win+R ------> 输入cmd------>输入wmic memphysical get maxcapacit
Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如 ps -ef | grep kafka 可以看到kafka这个程序的进程id。第一个标注的地方是CPU和内存占用率,后面的943100是物理内存使用量,单位是k,此时kafka大约占用943M内存。通过: ps aux | sort -k4,4nr | head -n 10 查看内存占用前10名的程序。这样可以动态实时的看到CPU和内存的占用率,然后按q键回到命令行。另外还可以通过 top 命令动态查看内存占用。...
The pmap command reports the memory map of a process or processes.
pmap 提供了进程的内存映射,用于显示一个或多个进程的内存状态,报告进程的地址空间和内存状态信息。