社区
Linux/Unix社区
帖子详情
性能问题:Solaris和AIX下面如何编程虚拟内存的大小、单个CPU占用率?
Netguy
2003-11-20 09:29:06
Solaris 5.8和AIX 4.3下面如何获得虚拟内存的大小、单个CPU占用率?
用prtconf或者sysconf()函数可以获得物理内存的总数,用vmstat可以得到空闲虚拟内存的总数。
但是如何得到虚拟内存总数、单个CPU(或平均的)的占用率呢?谢谢
...全文
235
7
打赏
收藏
性能问题:Solaris和AIX下面如何编程虚拟内存的大小、单个CPU占用率?
Solaris 5.8和AIX 4.3下面如何获得虚拟内存的大小、单个CPU占用率? 用prtconf或者sysconf()函数可以获得物理内存的总数,用vmstat可以得到空闲虚拟内存的总数。 但是如何得到虚拟内存总数、单个CPU(或平均的)的占用率呢?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sexroute
2003-12-12
打赏
举报
回复
// sys_info_v1.cpp: implementation of the sys_info_v1 class.
// coded by 赵大力 12-10-2003
//////////////////////////////////////////////////////////////////////
#include "sys_info_v1.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
sys_info_v1::sys_info_v1()
{
}
sys_info_v1::~sys_info_v1()
{
}
//////////////////////////////////////////////////////////////////////////
// 获得整数型系统参数
//////////////////////////////////////////////////////////////////////////
long sys_info_v1::m_i_getPara(kstat_ctl_t *kc, char *szFirstClass, char *szSecondClass, char *szThirdClass)
{
if(this->m_i_isInit!=1){
this->m_i_initKstat();
}
kstat_t *ksp;
kstat_named_t *knp;
/*查询大类*/
if (!(ksp = kstat_lookup(kc, szFirstClass, -1, szSecondClass))) {
cout<<"zdl lookup "<<szFirstClass<<"failed!"<<endl;
exit(1);
}else{
}
if (kstat_read(kc,ksp,NULL)<0) {
cout<<"zdl read "<<szFirstClass<<"failed!"<<endl;
exit(1);
}else{
}
/*查询小类*/
knp = (kstat_named_t*)kstat_data_lookup(ksp, szThirdClass);
return knp->value.i32;
}
//////////////////////////////////////////////////////////////////////////
// 获得字符串型系统参数
//////////////////////////////////////////////////////////////////////////
char * sys_info_v1::m_sz_getPara(kstat_ctl_t *kc, char *szFirstClass, char *szSecondClass, char *szThirdClass)
{
if(this->m_i_isInit!=1){
this->m_i_initKstat();
}
kstat_t *ksp;
kstat_named_t *knp;
/*查询大类*/
if (!(ksp = kstat_lookup(kc, szFirstClass, -1, szSecondClass))) {
cout<<"zdl lookup "<<szFirstClass<<"failed!"<<endl;
exit(1);
}else{
}
if (kstat_read(kc,ksp,NULL)<0) {
cout<<"zdl read "<<szFirstClass<<"failed!"<<endl;
exit(1);
}else{
}
/*查询小类*/
knp = (kstat_named_t*)kstat_data_lookup(ksp, szThirdClass);
return knp->value.c;
}
//////////////////////////////////////////////////////////////////////////
// 获得系统基本信息cpu数量、主频、类型、物理内存容量
//////////////////////////////////////////////////////////////////////////
int sys_info_v1::getBaseInfo(_sysInfo *pSysinfo)
{
//////////////////////////////////////////////////////////////////////////
//利用uname api获得系统信息
//////////////////////////////////////////////////////////////////////////
struct utsname buf;
int href=uname ( &buf);
pSysinfo->buf=buf;
//////////////////////////////////////////////////////////////////////////
//得到内存页大小
//////////////////////////////////////////////////////////////////////////
int pagesize=this->pagesize;
pSysinfo->cCpuType=this->m_sz_getPara(this->kc,"cpu_info",NULL,"cpu_type");
pSysinfo->cCpuSpeed=this->m_i_getPara(this->kc,"cpu_info",NULL,"clock_MHz");
pSysinfo->cCpuNo=this->m_i_getPara(this->kc,"unix","system_misc","ncpus");
pSysinfo->cTotalMemory=(this->m_i_getPara(this->kc,"unix","system_pages","physmem")*(pagesize)/1024/1024);
return 0;
}
int sys_info_v1::m_i_initKstat()
{
this->kc=NULL;
//////////////////////////////////////////////////////////////////////////
// 获得系统页大小
//////////////////////////////////////////////////////////////////////////
this->pagesize= sysconf(_SC_PAGESIZE);
//////////////////////////////////////////////////////////////////////////
// 初始化kstat
//////////////////////////////////////////////////////////////////////////
if (!this->kc) {
if (!(this->kc = kstat_open())) {;
cout<<"kstat_open() failed! "<<endl;
exit(1);
}
}
if (kstat_chain_update(this->kc) < 0) {
cout<<"kstat_chain_update() failed! "<<endl;
exit(1);
}
this->m_i_isInit=1;
return 0;
}
int main(){
sys_info_v1 *p=new sys_info_v1();
_sysInfo *baseInfo=new _sysInfo();
//////////////////////////////////////////////////////////////////////////
// 初始化 kstat
//////////////////////////////////////////////////////////////////////////
p->m_i_initKstat();
//////////////////////////////////////////////////////////////////////////
// 获得基本信息
//////////////////////////////////////////////////////////////////////////
p->getBaseInfo(baseInfo);
cout<<baseInfo->cCpuSpeed<<endl;
cout<<baseInfo->cCpuType<<endl;
cout<<baseInfo->cTotalMemory<<endl;
cout<<baseInfo->cCpuNo<<endl;
cout<<(&(baseInfo->buf))->machine<<endl;
cout<<(&(baseInfo->buf))->nodename<<endl;
cout<<(&(baseInfo->buf))->release<<endl;
cout<<(&(baseInfo->buf))->sysname<<endl;
cout<<(&(baseInfo->buf))->version<<endl;
//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
return 0;
}
blueflame
2003-11-24
打赏
举报
回复
mosaic(影子),请问要让AIX有perfstat.h,需要安装哪几个安装包?谢谢!
mosaic
2003-11-24
打赏
举报
回复
我没装过,我用的机器上有bos.perf.libperfstat这个fileset.
7805yhb
2003-11-21
打赏
举报
回复
那SCO和LINUX和FreeBSD上呢?
linaxing
2003-11-21
打赏
举报
回复
solarisCPU的占用率:
kstat_open, kstat_chain_update, kstat_read, kstat_close
mosaic
2003-11-20
打赏
举报
回复
Aix上你可以参考一下perfstat_memory_total和perfstat_cpu_total两个函数的帮助。
HPUX上可以用pstat_getstatic和pstat_getdynamic两个函数
solaris上不清楚。
Netguy
2003-11-20
打赏
举报
回复
紧急啊,哪位达人帮帮忙!谢谢!
数据库项目组日常运维及应急故障处理手册.docx
常见
问题
及处理方案
CPU
使用率高的
问题
通过操作系统命令top topas glance等查看top进程号,确认是系统进程还是oracle应用进程,查询当前top进程执行的操作和sql语句进行分析。 根据进程号获取正在执行的sql SELECT a.osuser, a.username,b.address,b.hash_value, b.sql_text from v$session a, v$sqltext b, v$process p where p.spid = &spid and p.addr = a.paddr and a.STATUS = 'ACTIVE' and a.sql_address =b.address order by address, piece; 数据库无法连接 数据库无法连接,一般可能是如下原因造成: (1)数据库宕了 (2)监听异常 (3)数据库挂起 (4)归档目录满 (5)数据库或应用主机的网卡出现
问题
不能正常工作 (6)应用主机到数据库主机的网络出现
问题
。 1、数据库宕了 立即启动数据库。 Startup 2、监听异常 此时一般体现为: 监听进程占用
CPU
资源大;d 监听日志异常。 此时,立即重启监听,监听重启一般能在1分钟之内完成。 Lsnrctl restart 3、数据库挂起 立即重启数据库。 Startup 4、归档目录满 (1)在没有部署OGG数据同步的情况下,立即清理归档日志文件。 (2)如果部署了OGG数据同步,查看OGG正在读取的归档日志文件,立即 清理OGG不再需要的日志文件。 5、数据库或应用主机的网卡出现
问题
不能正常工作。 立即联系主机工程师处理。 6、应用主机到数据库主机的网络出现
问题
。 立即联系网络维护人员查看。 CRS/GI无法启动 对于10g及11gR1版本的CRS
问题
1、进入/tmp目录下,看是否产生了crsctl.xxxxx文件 如果有的话,看文件内容,一般会提示OCR无法访问,或者心跳IP无法 正常绑定等信息。 2、如果/tmp目录下没有crsctl.xxxxx文件 此时查看ocssd.log文件,看是否能从中得到有价值的信息。 可能的
问题
:网络心跳不通。 3、/tmp目录无crsctl.xxxxx且日志中没有报错信息,只有停CRS时的日志信 息。 此时可能是RAC两个节点对并发裸设备的访问有
问题
,此时考虑: (1)停掉两个节点的CRS。 (2)两个节点先同时去激活并发VG,然后再激活VG。 (3)重新启动CRS。 对于11gR2的GI
问题
分析$GRID_HOME/log/nodename目录下的日志文件,看是否能从中找出无法启动的原因。 常见
问题
: 1、心跳IP不同。 2、ASM实例无法启动。 对CRS的故障诊断和分析,参加本文档中RAC部分的MOS文档. 数据库响应慢 应急处理步骤: (1)找到占用
CPU
资源大的sql或者模块,然后停掉此应用模块。 (2)如果属于由于种种原因引起的数据库hang住情况,立即重启数据 库,此时重启需要约15分钟时间。 重要说明: 如果重启数据库的话,会有如下负面影响: (1)要kill掉所有连接到数据库中的会话,所有会话都会回滚。 (2)立即重启的话,不能获取并保留分析数据库挂起原因的信息,在后续分析
问题
时,没有足够信息用于分析
问题
产生的根本原因。 一般正常重启的话,都需要手动获取用于分析数据库重启原因的信息,以便编写分析报告,但是在最长情况下,获取日志信息可能就要40分钟时间。此时一般做systemstate dump,且如果是rac情况的话,需要2个节点都做,且需要做2次或以上。 常规处理步骤,分如下几种情况处理: (1)所有业务模块都慢。 (2)部分业务模块慢。 (3)数据库hang住。 所有业务模块都慢 此时首先查看系统资源,看是否属于
CPU
资源使用率100%的
问题
,如果是,参考本章“
CPU
使用率高的
问题
”解决办法。如果系统资源正常,那很可能是数据库hang住了,此时参考数据库Hang部分。 部分业务模块慢 分析运行慢的模块的sql语句: (1)看是否是新上的sql。 (2)看执行计划是否高效。 (3)优化运行慢的模块的sql语句。 数据库hang住 应急处理方式:重启数据库。 常规处理方式: (1)分析alert日志,看是否能从alert日志中,可以很快找到引起
问题
的原 因。 (2)做3级别的hanganalyze,先做一次,然后隔一分钟以后再做一次。 并分析hanganalyze 生成的trace文件,看是否可以找到引起数据库hang 住的会话的信息。 (3)做systemstate dump 此时生成systemstate dump的时间会比较长,尤其是在会话数量较多的情 况下。且生成dump文件的
大小
较大,在G级别以上。在生成一次以 后,过一分钟再收集一次,另外如果是RAC,那么两个节点都需要收 集。 对hang做dump请参考“对数据库HANG做DUMP一章”。 数据误删除 此
问题
,没有应急办法,只能按如下步骤处理: 1、对于10g及以上版本,看是否可以通过闪回进行恢复。 2、查看测试环境数据库,看其中是否有需要的数据。 3、使用备份进行恢复,此方法一般花费时间较长。 快速shutdown数据库 1. 停止监听 2. 做一个检查点操作 SQL> alter system checkpoint; 3. 杀掉所有LOCAL=NO的操作系统进程
AIX
、HP-UX、Linux、
Solaris
: $ ps -ef|grep $ORACLE_SID| grep LOCAL=NO | grep -v grep |awk '{print $2}'|xargs -i kill -9 {} Windows: SQL> select 'orakill ' || (select value from v$parameter where name = 'instance_name') || ' ' ||p.spid from v$process p, v$bgprocess bp where p.ADDR = bp.PADDR(+) and bp.PADDR is null and p.SPID is not null; 在命令行执行: C:\> orakill db1 7642 C:\> orakill db1 7644 4. 停止数据库 SQL> shutdown immediate 清理分布式事务 -- 9i需要设置_sum_debug_mode SQL> alter session set "_smu_debug_mode" = 4; alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; column local_trna_id format a20 column global_tran_id format a25 SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, FAIL_TIME,STATE, MIXED FROM DBA_2PC_PENDING; LOCAL_TRAN_ID GLOBAL_TRAN_ID FAIL_TIME STATE MIX -------------- ------------------------- -------------------- ---------------- --- 12.29.103137 TAXIS.9572b613.12.29.103137 30-aug-2011 10:09:11 collecting no SQL> commit force '12.29.103137'; Commit complete. SQL> EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('12.29.103137'); PL/SQL procedure successfully completed. SQL> commit; -- 清理每个分布式事务都需要commit; 数据泵 1. 相关参数 PARALLEL参数考虑 可以设置成物理
CPU
(不是逻辑
CPU
)数的两倍数目,然后调整 对于Data Pump Export,PARALLEL参数必须要小于等于dump files数 对于Data Pump Import,PARALLEL不要比dump文件数大很多,可以大一些。这个参数也指定了导入时创建索引的并行度。 PARALLEL只允许在企业版使用。 nohup expdp system/manager schemas=kdjm DIRECTORY=DUMP_FILES PARALLEL=3 dumpfile=expCASES_%U.dmp logfile=nnsiexp2008_12_28.log & 通配符 %U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中nn 从 01 开始,然后按需要向上增加 相关监控 -- 监控长事务 set linesize 120 column opname heading 'Operation' format a25 column target heading 'Target' format a15 column pct heading 'Percent' format 999 column es heading 'Elapsed|Seconds' format 999999 column tr heading 'Time|Remaining|Seconds' format 99999 column program format a30 column machine format a16 select L.sid ssid, substr(opname,1,25) opname, target, trunc((sofar/totalwork)*100) pct, to_char(60*sofar*8192/(24*60*(last_update_time-start_time))/1024/1024/60, '9999.0') Rate, round(elapsed_seconds/60, 2) es, round(time_remaining/60, 2) tr, program, machine from v$session_longops L, v$session s where time_remaining > 0 and l.sid = s.sid order by start_time; 坏块恢复 在遇到坏块的时,一般应按以下的流程来处理: 1 如果坏块的对象是索引,重建索引 2 使用备份来进行恢复 3 使用10231事件,或者DBMS_REPAIR.SKIP_CORRUPT_BLOCKS过程,让oracle跳过坏块,然后用exp导出表和使用CREATE TABLE AS创建新表。 4 尝试使用SQL脚本将完好的数据复制到一个新表中,或者用EXP配合QUERY参数导出完好的数据。 5 手工修改坏块。 有两种情况是不能使用事件10231和DBMS_REPAIR.SKIP_CORRUPT_BLOCKS来跳过坏块的: 1 硬件
问题
造成OS层不能读取数据。 2 表中的非数据块,或者说是元数据块。比如段头,Extent Map块。这种坏块是不能跳过的。 3 在表中存在有其他异常的块,从
单个
块来看都没有损坏,checksum值也是正确的,但是有的块在段内却是有
问题
的。比
WLS的异常高
CPU
占用率
WLS的异常高
CPU
占用率
JAVA 进程异常高的
CPU
占用率
问题
描述
系统管理员或用户注意到 JAVA 进程消耗大量的
CPU
资源,
并想要了解是哪个方面消耗了大量
CPU
资源,以及导致出现这种现象的原因。
故障排除
请注意,并非
下面
所有任务都需要完成。有些
问题
仅通过执行几项任务就可以解决。
为什么发生此
问题
?
发生此
问题
有许多原因:JAVA创建的线程、不良编码习惯或第三方软件。
遗憾的是,证明在什么地方发生此
问题
有时候非常困难。<
java进程异常高的
cpu
占用率
问题
描述 系统管理员或用户注意到 JAVA 进程消耗大量的
CPU
资源, 并想要了解是哪个方面消耗了大量
CPU
资源,以及导致出现这种现象的原因。 故障排除 请注意,并非
下面
所有任务都需要完成。有些
问题
仅通过执行几项任务就可以解决。 为什么发生此
问题
? 发生此
问题
有许多原因:JAVA创建的线程、不良编码习惯或第三方软件。 遗憾的是,证明在什么地方发生此
问题
有时候非常困难。...
weblogic进程高
CPU
使用率分析
WLS 的异常高
CPU
占用率
问题
描述系统管理员或用户注意到 WebLogic Server 进程消耗大量的
CPU
资源,并想要了解是哪个方面消耗了大量
CPU
资源,以及导致出现这种现象的原因。故障排除请注意,并...
Linux/Unix社区
23,124
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章