Linux 命令:资源管理

来源:互联网 发布:3d定制女仆2巧克力数据 编辑:程序博客网 时间:2024/05/21 16:59
 Linux 命令:资源管理作者:Arup Nanda 在此部分中,了解用于监视物理组件的高级 Linux 命令Linux 系统由若干主要物理组件组成,如 CPU、内存、网卡和存储设备。要有效地管理 Linux 环境,您应该能够以合理的精度测量这些资源的各种指标 — 每个组件处理多少资源、是否存在瓶颈等。在本系列的其他部分中,您已经学习了处于宏级别的用于测量指标的一些命令。但在此部分中,您将了解专门用于监视物理组件的高级 Linux 命令。具体而言,您将了解以下类别的命令:内存  free、vmstat、mpstat、iostat、sarCPU   vmstat、mpstat、iostat、sarI/O   vmstat、mpstat、iostat、sar进程  ipcs、ipcrmfree    一个常见的问题是“我的应用程序和各种服务器、用户和系统进程正在使用多少内存?”或者“现在有多少内存可用?”如果正在运行的进程使用的内存大于可用 RAM,则需要将这些进程移到交换区。因此,一个补充问题是“正在使用多少交换区空间?”free 命令将回答所有这些问题。而且,一个非常有用的选项 –m 可以显示可用内存(以 MB 为单位):# free -m             total       used       free     shared    buffers     cachedMem:          1772       1654        117          0         18        618-/+ buffers/cache:       1017        754Swap:         1983       1065        918    以上输出显示系统具有 1,772 MB 的 RAM,已使用 1,654 MB,还有 117 MB 内存可用。第二行显示在物理内存中缓冲区和缓存大小的更改。第三行显示交换区利用情况。要以 KB 或 GB 为单位显示以上内容,请将 -m 选项分别替换为 -k 或 -g。使用 –b 选项将以字节为单位。# free -b             total       used       free     shared    buffers     cachedMem:    1858129920 1724039168  134090752          0   18640896  643194880-/+ buffers/cache: 1062203392  795926528Swap:   2080366592 1116721152  963645440–t 选项在输出底部显示总数(物理内存和交换区的总和):# free -m -t             total       used       free     shared    buffers     cachedMem:          1772       1644        127          0         16        613-/+ buffers/cache:       1014        757Swap:         1983       1065        918Total:        3756       2709       1046尽管 free 不显示百分比,但是我们可以提取并格式化输出的特定部分,将已使用的内存仅显示为总数的百分比:# free -m | grep Mem | awk '{print ($3 / $2)*100}' 98.7077这在具体数据非常重要的 shell 脚本中非常方便。例如,您可能希望在可用内存的百分比低于特定阈值时触发一个警报。同样,要发现已使用交换区空间的百分比,您可以发出:# free -m | grep -i Swap | awk '{print ($3 / $2)*100}'11.1482可以使用 free 查看应用程序施加的内存负载。例如,启动备份应用程序之前检查可用内存,启动之后立即检查可用内存。两者之差就是备份应用程序消耗的内存。针对 Oracle 用户的用法    那么,您如何使用该命令管理运行 Oracle 环境的 Linux 服务器呢?性能问题的一个最常见原因是内存不足,从而导致系统临时将内存区域“交换”到磁盘中。某种程度的交换可能是必然的,但是交换过多则表示可用内存不足。而现在,您可以使用 free 获得可用内存信息,紧接着使用 sar 命令(稍后介绍)检查内存和交换区消耗的历史趋势。如果交换区的使用是暂时的,则可能出现一次高峰,但是如果明确要经过一段时间,则应注意。持续的内存过载可能有几个明显且可能的疑点:较大的 SGA 高于可用内存在 PGA 上分配了大量内存某些进程出现泄露内存的错误对于第一种情况,应确保 SGA 低于可用内存。根据经验,对 SGA 使用大约物理内存的 40%,当然,应根据具体情况定义该参数。对于第二种情况,应尝试减少查询中的大量缓冲区分配。对于第三种情况,应使用 ps 命令(在本系列的之前部分中介绍过)确定可能泄露内存的具体进程。ipcs当某个进程运行时,它会夺取“共享内存”。该进程可能拥有一个或很多个共享内存段。进程之间彼此(“进程间通信”或 IPC)发送消息并使用信号。要显示有关共享内存段、IPC 消息队列以及信号的信息,可以使用一个命令:ipcs。–m 选项非常受欢迎;它显示共享内存段。# ipcs -m ------ Shared Memory Segments --------key        shmid      owner      perms      bytes      nattch     status      0xc4145514 2031618    oracle    660        4096       0                       0x00000000 3670019    oracle    660        8388608    108                     0x00000000 327684     oracle    600        196608     2          dest         0x00000000 360453     oracle    600        196608     2          dest         0x00000000 393222     oracle    600        196608     2          dest         0x00000000 425991     oracle    600        196608     2          dest         0x00000000 3702792    oracle    660        926941184  108                     0x00000000 491529     oracle    600        196608     2          dest         0x49d1a288 3735562    oracle    660        140509184  108                     0x00000000 557067     oracle    600        196608     2          dest         0x00000000 1081356    oracle    600        196608     2          dest         0x00000000 983053     oracle    600        196608     2          dest         0x00000000 1835023    oracle    600        196608     2          dest    该输出表明服务器正在运行 Oracle 软件,显示了各种共享内存段。每个共享内存段由显示在“shmid”列下面的共享内存 ID 唯一标识。(稍后,您将看到如何使用该列值。)显然,“owner”显示内存段的所有者,“perms”列显示权限(与 unix 权限相同),“bytes”显示字节大小。-u 选项显示一个非常快速的摘要:# ipcs -mu------ Shared Memory Status --------segments allocated 25pages allocated 264305pages resident  101682pages swapped   100667Swap performance: 0 attempts     0 successes–l 选项显示限定值(相对于当前值)# ipcs -ml ------ Shared Memory Limits --------max number of segments = 4096max seg size (kbytes) = 907290max total shared memory (kbytes) = 13115392min seg size (bytes) = 1如果您看到当前值处于或接近限定值,则应该考虑提高限定值。可以使用 shmid 值获取具体共享内存段的详细图片。–i 选项可以完成该操作。下面是查看 shmid 3702792 详细信息的方法:# ipcs -m -i 3702792 Shared memory Segment shmid=3702792uid=500 gid=502 cuid=500        cgid=502mode=0660       access_perms=0660bytes=926941184 lpid=12225      cpid=27169      nattch=113att_time=Fri Dec 19 23:34:10 2008  det_time=Fri Dec 19 23:34:10 2008  change_time=Sun Dec  7 05:03:10 2008    稍后,本文将采用一个示例向您介绍如何解释以上输出。-s 显示系统中的信号:# ipcs -s ------ Semaphore Arrays --------key        semid      owner      perms     nsems     0x313f2eb8 1146880    oracle    660        104       0x0b776504 2326529    oracle    660        154     … and so on …      它显示一些有价值的数据。它显示 ID 为 1146880 的信号数组具有 104 个信号,另一个数组具有 154 个信号。如果您增加信号,则总值必须低于内核参数 (semmax) 定义的上限。安装 Oracle 数据库软件时,预安装的检查程序将检查 semmax 的设置。之后,当系统达到稳定状态时,您可以检查实际的利用情况,然后相应地调整内核值。针对 Oracle 用户的用法   如何查看 Oracle 数据库实例使用的共享内存段?为此,请使用 oradebug 命令。首先以 sysdba 身份连接到数据库: $ sqlplus / as sysdba在 SQL 中,使用 oradebug 命令,如下所示:SQL> oradebug setmypidStatement processed.SQL> oradebug ipcInformation written to trace file.要查找跟踪文件的名称,执行以下命令:SQL> oradebug TRACEFILE_NAME/opt/oracle/diag/rdbms/odba112/ODBA112/trace/ODBA112_ora_22544.trc现在,如果打开该跟踪文件,将会看到共享内存 ID。下面是该文件的节选:Area #0 `Fixed Size' containing Subareas 0-0  Total size 000000000014613c Minimum Subarea size 00000000   Area  Subarea    Shmid      Stable Addr      Actual Addr      0        0 17235970 0x00000020000000 0x00000020000000                              Subarea size     Segment size                          0000000000147000 000000002c600000 Area #1 `Variable Size' containing Subareas 4-4  Total size 000000002bc00000 Minimum Subarea size 00400000   Area  Subarea    Shmid      Stable Addr      Actual Addr      1        4 17235970 0x00000020800000 0x00000020800000                              Subarea size     Segment size                          000000002bc00000 000000002c600000 Area #2 `Redo Buffers' containing Subareas 1-1  Total size 0000000000522000 Minimum Subarea size 00000000   Area  Subarea    Shmid      Stable Addr      Actual Addr      2        1 17235970 0x00000020147000 0x00000020147000                              Subarea size     Segment size                          0000000000522000 000000002c600000... and so on ... 共享内存 id 以红色粗体显示。可以使用该共享内存 ID 来获取共享内存的详细信息:# ipcs -m -i 17235970另一个有用的观察是 lpid 的值 — 最后一个接触共享内存段的进程的进程 ID。要展示该属性的值,使用 SQL*Plus 从另一个会话连接到该实例。$ sqlplus / as sysdba在该会话中,查找服务器进程的 PID:SQL> select spid from v$process  2  where addr = (select paddr from v$session  3     where sid =  4        (select sid from v$mystat where rownum < 2)  5  ); SPID------------------------13224现在,针对同一共享内存段再次执行 ipcs 命令:# ipcs -m -i 17235970 Shared memory Segment shmid=17235970uid=500 gid=502 cuid=500        cgid=502mode=0660       access_perms=0660bytes=140509184 lpid=13224      cpid=27169      nattch=113att_time=Fri Dec 19 23:38:09 2008  det_time=Fri Dec 19 23:38:09 2008  change_time=Sun Dec  7 05:03:10 2008注意,lpid 的值已经从原来的值 12225 更改为 13224。lpid 显示最后一个接触共享内存段的进程的 PID。该命令自身的价值不大。下一个命令 ipcrm 允许您基于输出采取操作,正如您将在下一部分所ipcrm既然您已经标识了共享内存和其他 IPC 指标,那么使用它们做什么呢?之前您看到过一些用法,如标识 Oracle 使用的共享内存、确保为共享内存设置了内核参数等等。另一个常见的应用是删除共享内存、IPC 消息队列或信号数组。要删除某个共享内存段,注意 ipcs 命令输出中它的 shmid。然后使用 –m 选项删除该段。要删除 ID 为 3735562 的段,使用:# ipcrm –m 3735562这将删除该共享内存。还可以使用该命令删除信号和 IPC 消息队列(使用 –s 和 –q 参数)。针对 Oracle 用户的用法有时当您关闭数据库实例时,Linux 内核可能未完全清除共享内存段。留下的共享内存没有什么用处,但它会占用系统资源,从而使可用于其他进程的内存更少。这种情况下,可以检查“oracle”用户所拥有的任何延迟共享内存段,然后删除它们,如果有这样的段,使用 ipcrm 命令。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2周岁宝宝突然说话结巴怎么办 两周岁宝宝突然说话结巴怎么办 三周岁宝宝说话突然结巴怎么办 小孩g和d不分怎么办 两岁宝宝皮肤黑怎么办 2岁宝宝肤色偏黄怎么办 2岁宝宝迷上手机怎么办 2岁宝宝说话口吃怎么办 两岁宝宝突然口吃怎么办 两岁半的宝宝还不会说话怎么办 2岁宝宝自闭症怎么办呀 新生儿又吐又拉怎么办 一岁多宝宝受凉呕吐拉稀怎么办 7个月的宝宝腹泻怎么办 两岁宝宝拉稀水怎么办 2岁宝宝发烧呕吐怎么办 1岁宝宝着凉呕吐怎么办 2岁着凉了呕吐怎么办 2岁宝宝着凉呕吐怎么办 两岁宝宝偏矮怎么办 2岁宝贝吐没精神怎么办 11个月的宝宝吐怎么办 二岁的宝宝吐了怎么办 十个月小孩吐了怎么办 10个月宝宝呕吐怎么办 小孩又拉又吐的怎么办 小孩子不吃饭呕吐拉肚子怎么办 小孩发烧后又吐怎么办 11个月宝宝吐了怎么办 11个月宝宝拉肚子怎么办 2岁宝宝反复呕吐怎么办 1岁半幼儿拉肚子怎么办 宝宝打嗝呕吐胃难受怎么办 3岁宝宝发烧还吐怎么办 孩子喝水都吐怎么办啊 宝宝吃多了呕吐怎么办 3岁宝宝吐怎么办才好 儿童受凉肚子疼发热呕吐怎么办 两岁宝宝半夜呕吐怎么办 两岁宝宝吐了怎么办 2岁宝宝发烧吐怎么办