
原来跑着的MySQL挂了, 最终定位问题是机器内存不够了, 为什么内存不够了呢 想到前两天部署的服务, 所以想看下该服务的当前的内存占用情况
注意 : 这里显示的内存信息是系统层面的进程的内存使用情况
Linux中查看某个进程占用内存的情况,执行如下命令即可,将其中的[pid]替换成相应进程的PID号:
说明
/proc/[pid]/status中所保存的信息除了内存信息,还包括进程IDs、信号等信息,此处暂时只介绍内存相关的信息。
字段 说明
查看内存使用情况
我常用的查看内存使用情况的两种方式:
1、使用命令:adb shell dumpsys meminfo $package_name or $pid
2、
通过ddms查看
最近在解决探针获取Ruby应用服务器的内存使用的情况,将解决的思路总结一下,希望对此感兴趣的伙伴一起探讨。
先对比应用服务器: Puma 和 Passenger ,下面对比这2个服务器内存统计,
单进程模式:直接获取进程id: Processpid
cluster模式:以启动2个worker进程为例:
从上面截图可以看到,Puma启动后会出现3个进程:1个master进程和2个worker进程。
内存的使用情况(见 RSS 列):
而对于探针来说,一个探针实例是伴随进程一起启动的,也就说一个探针只能识别自己所在的进程id,那如何获取应用服务器使用的内存?我们用其中1个woker进程所在的进程组[ PGID ]看一下:(为啥不是父进程, 见下文Passenger)
这3个进程都在相同的进程组里,而且进程组号为master的进程id,那我们就可以用这个信息获取应用服务器的所使用的内存:
4累加进程组内进程内存和即为应用服务器使用内存:
启动Passenger后的Process信息:
对Passenger架构感兴趣的请移步到 这儿
查看一下worker所在进程组和父进程:
通过PPID可以看出
Passenger core —> Passenger AppPreloader —> Passenger RubyApp
三者为爷-父-子关系,当服务器请求量增大时 AppPreloader 会产生新的进程来响应请求,从而新的 RubyApp 进程的 PPID 即为 AppPreloader 的 PID ,这样看来就可以将同一个 PPID 的进程加起来得到应用服务器的内存?
由于Passenger会根据服务器的负载量动态调整进程数,当服务器请求量较小时,Passenger会kill多余的进程,会出现下面的情况:
AppPreloader 也被Passenger杀掉了。原 RubyApp 进程的 PPID 变成了1。这时如果服务器的请求量增大,应用服务器进程会成为这样:
Passenger core 产生新的 AppPreloader 进程,并且 AppPreloader 产生新的 RubyApp 进程,这时如果只用 PPID 统计应用服务器内存就会不准确,所以要统计Passenger的使用的内存还得通过累加在同一个进程组( PGID )的所有进程使用的内存和得到。
由于 Unicorn 和 Rainbows 都与Puma的cluster模式[master+worker模式]类似,内存统计的方式可以参考上文的Puma。
由于 Thin 启动多个server后没有类似的特点,上面方法不适用于Thin,有好方法的伙伴们可以告知:smile:
在解决探针统计应用服务器的内存问题上,摸索出了上面的一条路子,如果小伙伴们有其他更好的方式,可以一起探讨一下。
使用wmi
类“Win32_Processor”中LoadPercentage属性为当前的cpu使用率
示例代码: Private Sub Timer1_Timer()
Dim WMI服务 As Object
Dim 对象 As Object
Dim 子对象 As Object
Dim 电脑名 As String
Dim 刷新 As Long
刷新 = 0
电脑名 = "" '表示本地计算机
Set WMI服务 = GetObject("winmgmts://" & 电脑名 & "/root/cimv2")
Set 对象 = WMI服务InstancesOf("Win32_Processor")
MeCurrentX = 0
MeCurrentY = 0
For Each 子对象 In 对象
If 刷新 = 0 Then
刷新 = 1
MeCls
End If
MePrint 子对象Name & "[" & 子对象CurrentClockSpeed & "Hz] 使用率:" & _
子对象LoadPercentage & "%"
Next
End Sub
预测程序运行时的内存:如果看程序所占系统的空间,这个并不完全取决于程序,也取决于 *** 作系统,可以在任务管理器中去看。
wmic process where name="cmdexe" get WorkingSetSize这里 "cmdexe" 你可替换成你的程序名字。
你也可以用你的程序 进程 PID 号数 调用, 命令是:wmic process where processid=6884get WorkingSetSize这里6884你可替换成你的程序进程 PID。
系统文件夹:
命令:%AllUsersProfile% (点击确定或回车打开相应的文件夹)。
说明:所有用户的配置文件总目录。
对应路径:C:\Documents and Settings\All Users。
查看实际d出的文件夹路径就会发现,这个路径不同于普通的系统路径,这是一个双系统共享C盘的多系统中的Windows XP *** 作系统的路径。所以从运行中输入相对位置打开系统文件夹的好处就在此,直达目标文件夹。
命令:%HOMEPATH%(点击确定或回车打开相应的文件夹)。
命令:%USERPROFILE%。
说明:指当前用户的配置文件目录。
以上就是关于Linux中查看进程占用内存的情况全部的内容,包括:Linux中查看进程占用内存的情况、怎么持续监控安卓应用程序得内存、探讨如何统计Ruby应用服务器使用内存方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)