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

linux 进程占用内存大小

  • 内存
  • 2024-05-21 20:35:13
  • 8189

一、linux下怎么查看一个进程占用内存大小您好,方法如下:
您可以直接使用top命令查看%MEM的内容。您可以选择按进程或按用户查看。如果想查看Oracle用户的进程内存使用情况,可以使用如下命令:
(1)top
top命令是Linux下常用的性能分析工具。它可以实时显示系统中各个进程的资源使用情况,类似于Windows任务管理器
可以直接使用top命令查看%MEM的内容。您可以选择按进程或按用户查看。如果想查看oracle用户的进程内存使用情况,可以使用如下命令:
 $
top
-u
oracle
内容说明:
PID:进程的ID
USER:进程所有者
PR:进程的优先级,优先级越小,优先执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示运行,Z表示僵尸状态,N表示进程优先级值为负
%CPU:进程占用CPU的使用率
%MEM:物理内存以及进程使用的总内存百分比
TIME+:进程启动后占用的CPU总时间,即CPU使用时间的累计值。
COMMAND:进程启动命令名
常用命令:
P:按%CPU使用率排名
T:按MITE+排名
M:按%MEM排名可以根据进程查看进程相关信息占用的内存。(可以通过ps查看进程号)如下:
​$
pmap
-d
14596
​(3)ps
​如图下面的例子:
ps
-e
-o
'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'
其中rsz为实际内存
​$
ps
-e
-o
'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'
|
grep
oracle
|
sort
-nrk5
其中rsz为实际内存,上面的例子实现了排序按记忆从大到小
二、如何查看Linux下进程的IO活动状况00Hey,Linux前段时间,几台测试服务器的Web应用响应速度非常慢,而且系统负载比较高,>10,但是CPU和内存却非常空闲,所以我怀疑这是磁盘性能瓶颈。我见过通过vmstat和iostat进行IO读写。数量非常大,尤其是使用iostat-x1命令可以直观地看到IO利用率始终为100%。
但是哪个进程会导致高I/O呢?由于JBoss和MySQL都存在于每台服务器上,JBoss会不断生成许多小数据文件和文本数据库数据,而MySQL会不断从master同步新数据。因此,我们怀疑这两个过程是造成高OI的原因。停止JBoss和MySQL后,IO立即降至0%。但我们仍然无法弄清楚谁是主要原因。特定进程的IO。
最后找到了两种方法来可视化IO进程的活动状态。
1.第一种方法是通过Python脚本来实现。
方法是将以下内容保存为一个名为的脚本,然后直接以root身份运行该脚本,就可以看到如下图的信息(既然我们已经解决了MySQL升级到SSDHDD的问题了)/O问题,所以我无法提供MySQL的屏幕截图)。其中,出现次数最多、数据多的进程是造成高I/O的主要原因。不幸的是,这个脚本无法显示进程每秒精确的I/O读写情况。
#
#chmod+
#./
#!/usr/bin/python
#Monitoringper-processdiskI/Oactivity
#由编写
importsys,os,time,signal,re
classDiskIO:
def__init__(self,pname=None,pid=None,reads=0,writes=0):
=pname
=pid
=0
=0
defmain():
argc=len()
ifargc!=1:
print"usage:./iotop"
(0)
()!=0:
print"mustberunasroot"
(0)
(,signal_handler)
('echo1>/proc/sys/vm/block_dump')
打印“TASKPIDREADWRITE”
whileTrue:
('dmesg-c>/tmp/')
l=[]
f=open('/tmp/','r')
line=ne()
whileline:
m=(\
'^(\S+)\((\d+)\):(READ|写入)block(\d+)on(\S+)',line)
ifm!=None:
ifnotl:
(DiskIO((1),m.组(2)))
line=ne()
继续
found=False
foriteminl:
==(2):
found=True
(3)=="READ":
=+1
(3)=="WRITE":
=+1
ifnotfound:
(DiskIO((1),(2)))
line=ne()
(1)
foriteminl:
print"%-10s%10s%10d%10d"%\
(,,,)
defsignal_handler(signal,frame):
('echo0>/proc/sys/vm/block_dump')
(0)
if__name__=="__main__":
main()
2.另一种方法是将Linux内核升级到>。=2.6.20,然后安装iotop软件即可实现。
但是,此更改不适用于生产环境,因为在RHEL5.6和5.7上,内核低于2.6.20。不过它显示的结果非常准确,对于新上线的机器和测试环境值得一试。具体方法是:
下载并升级新内核(>=2.6.20),编译时启用TASK_DELAY_ACCT和TASK_IO_ACCOUNTING选项。
解压内核后,进入配置界面:
#wget