辛 旻 (xinmin@baosight.com), IBM 主机工程师, 上海宝信软件股份有限公司
2008 年 4 月 24 日 本系列文章的作者通过自己长期的实际项目工作经历,总结出了他对于 HACMP 设计实施的经验。本系列会分为 4 部分,会向您详细地介绍实施 HACMP 过程中会经历的各个过程,如设计,配置,安装,测试等。本文为第 4 部分,首先会向您介绍一些编写 HACMP 脚本的注意事项和经验,然后作者会分享一下他对于 HACMP 实施的一些经验。
脚本部分
HACMP 的作用在于关键时刻能根据发生的情况自动通过预先制定好的策略进行相应的操作,如切换。使得用户经过短暂的中断即可继续使用服务。而对于用户来说,“服务可用”才是 HACMP 切换成功的标志,而这一点不光是 HACMP 配置本身,还大大倚赖于启停脚本的可用性。
自 IBM 的 HACMP5205 以后,趋于稳定,BUG 很少。这使得 HACMP 切换不成功的主要原因集中在启停脚本的问题上。而很多时候,脚本的问题是非常隐蔽和难以测试的,所以在编写启停脚本时需要考虑周全,系统上线后要仔细维护。
通过多年的实践,我们形成了自己的一套脚本编制方式,共享出来,供大家参考。
脚本规划
启停方式
对于启动脚本,完全放在后台,不影响 HACMP 的切换。
对于停止脚本,通过后台启动,前台检查的方式进行,并使用清理 VG 的进程,确保停止成功。
由于启停是由启停各个部件启动组成的,如 host1 的启停就是启停 tuxedo 和 xom 软件组成,host2 的启停就是有启动 DB 和 listener 组成。我们把主机的启动分割为多个部分,这样综合写出共性的公用脚本程序,这样虽然第一次编写测试这些公用程序会花费大量的时间和精力,但最终将大大减轻管理员的重复工作,简化了脚本的编写,保证了脚本的质量。
文件存放目录表
|
目录
|
用途
|
举例
|
|---|
|
/usr/sbin/cluster/app
|
存放 HA 启停脚本
| | |
/usr/sbin/cluster/app/log
|
存放启停应用的详细 log
| | |
/home/scripts/`hostname`
|
存放应用启停脚本
|
/home/scripts/host1
| |
/tmp
|
存放启停应用的 log
|
/tmp/ha_app.out
|
文件命名表:
以主机名为特征进行命名,这样比较方便使用和区分。
|
脚本
|
命名规则
|
举例
|
|---|
|
HA 启动脚本
|
start_`hostname`
|
start_host1
| |
应用启动脚本
|
start_`hostname`_app
|
start_host1_app
| |
HA 停止脚本
|
stop_`hostname`
|
stop_host2
| |
应用停止脚本
|
stop_`hostname`_app
|
stop_host2_app
| |
启停应用 log
|
/tmp/ha_app.out
| | |
启动应用详细 log
|
start_`hostname`_app`yyyymmddHHMM`log
|
start_host1_app200712241722.log
| |
停止应用详细 log
|
stop_`hostname`_app`yyyymmddHHMM`log
|
stop_host1_app200712241722.log
|
启停跟踪
为了便于跟踪和阅读,应用的启停 log 不写入 /tmp/hacmp.out,而是另行输出到单独的 log。一般情况下,管理员只需跟踪 /tmp/ha_app.out 即可,一直等不到结束,再查看 /usr/sbin/cluster/app/log 下详细 log。
[host2][root][/]>tail -f /tmp/ha_app.out
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Starting--- host2 at Tue Dec 18 11:17:51 BEIST 2007
Waiting------- DB testdb --------- start,Press any key to cancel..
DB testdb is started!
Waiting------- listener testdb --------- start,Press any key to cancel..
testdb -- LISTENER is started!
Waiting------- listener testdb port 1521--------- start,Press any key to cancel..
LISTENER testdb port 1521 is listening!
start eai1d1 successful! at Tue Dec 18 11:20:43 BEIST 2007
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[host2][root][/]>cd /usr/sbin/cluster/app
[host2][root][/]>more start_host2_app200712181117.log
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Starting--- eai1d1 at Mon Dec 24 16:06:35 BEIST 2007
Mon Dec 24 16:06:35 BEIST 2007
Waiting------- DB eaiz1dev --------- start,Press any key to cancel..
SQL*Plus: Release 10.2.0.2.0 - Production on Mon Dec 24 16:06:35 2007
Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> ORACLE instance started.
Total System Global Area 1543503872 bytes
Fixed Size 2071488 bytes
Variable Size 369099840 bytes
Database Buffers 1157627904 bytes
Redo Buffers 14704640 bytes
....Database mounted.
.Database opened.
SQL> Disconnected from Oracle Database 10g Enterprise
Edition Release 10.2.0.2.0 - 64bit Production
……
|
编写注意事项:
值得注意的是,经过测试和实际使用发现,由 HA 启动脚本时, 如有嵌套,相对目录执行程序将不能生效,必须写成绝对路径 。如下面的情况将导致错误:
start_host1: nohup /home/scripts/host1/start_host1_app &
start_host1_app: /home/scripts/comm/start_db.sh orarun testdb 1521
start_db.sh: cd /home/scripts/comm
check_db_main.sh testdb
check_db_main.sh not found
|
需要改写为
start_db.sh: /home/scripts/comm/check_db_main.sh testdb
|
启动脚本
由于 HACMP 的启动和应用的启动可以分开,为避免应用脚本的启动不正常导致 HACMP 的报错,建议将 HACMP 的启动脚本简化,将启动应用的部分放在另一个应用启动脚本里。
基于规划,start_host2_app 的启动脚本使用了公用程序 start_db.sh 和 wait_db_start.sh,源代码如下,供大家参考:
start_db.sh 代码:
#start_db.sh oracle_sid listener_name
ORACLE_SID=$1
sqlplus " / as sysdba"<< EOF
startup
EOF
lsnrctl start $2
|
wait_db_start.sh 代码:
wait_db.sh oracle_user oracle_sid listner_port
#return code: 1---press key canceled
waitout ()
{
printf "Waiting------- ${1} ${2} ${3}--------- start,Press any key to cancel."
}
#main
CURRENT_PATH=`pwd`
SCRIPTS_PATH=`dirname ${0}`
cd $SCRIPTS_PATH
waitout DB $2
i=1
while [ $i -gt 0 ]
do
waitkey
$SCRIPTS_PATH/check_db_main.sh $1 $2
i=$?
done
waitout listener $2
i=1
while [ $i -gt 0 ]
do
waitkey
$SCRIPTS_PATH/check_db_listener.sh $1 $2 $4
i=$?
done
waitout listener $2 "port $3"
i=1
while [ $i -gt 0 ]
do
waitkey
$SCRIPTS_PATH/check_port.sh $3
i=$?
done
echo "\nLISTENER $2 port $3 is listening!"
cd $CURRENT_PATH
exit 0
|
实际使用 start_host1 代码如下:
#start_host1
MACHINE=host1
GATEWAY=10.2.200.254
HA_LOG=log/start_"$MACHINE"_app`date +%C%y%m%d%H%M`.log
SCRIPTS_PATH=`dirname ${0}`
if [ "$SCRIPTS_PATH" = "." ];then
SCRIPTS_PATH=`pwd`
fi
if [ `hostname` = "$MACHINE" ]; then
route delete 0
route add 0 $GATEWAY
fi
> $SCRIPTS_PATH/$HA_LOG
nohup /home/scripts/comm/tail_log.sh start_app $SCRIPTS_PATH/$HA_LOG "!!!!!!!!!!!!|
started!|Waiting---|listening!|starting---|successful!" "successful!" >>/tmp/ha_app.out &
sleep 1
nohup /home/scripts/$MACHINE/start_"$MACHINE"_app ha >$HA_LOG &
exit 0
|
停止脚本
由于必须保证应用正常停止,才切换过去,所以停止脚本的正常结束才是 HACMP 停止应用服务器成功的标志。
停止脚本需要设定一个等待时间的阀值,超过这个阀值,将进行异常中止脚本的运行。
此外,为了防止停止时出现停不下来的现象,导致 HACMP 超时报 too long 广播,需要注意以下停止脚本的编写:
-
停止数据库脚本
停止数据库之前,必须记得先清理掉远程连接的用户,这样才能保证数据库能在可预测的时间内正常停止。
如 oracle 数据库停止之前,建议增加以下代码:
ps -ef|grep ora|grep $ORACLE_SID|grep "LOCAL=NO"|awk '{print "kill -9 "$2}'|sh
|
如果数据库超过一段时间仍停不下来,必须启动异常停止脚本。
-
最后加上清理文件系统的脚本
这一点很容易被忽略,因为有时即使应用正常停止,以下原因都可能导致导致 HACMP 不能 umount 这个文件系统 :
-
有用户登录在该文件系统下;
-
有其他程序使用了该文件系统下的库文件;
-
该文件系统与应用无关,但正在被使用。
结果均会最终导致 HACMP 停止不了该节点,切换失败。
基于这个原因,我们编写了 kill_vg_user.sh, 使用起来非常方便有效,都放在 /home/scripts/comm 下。现提供源代码,供大家使用和指正。
kill_vg_user.sh 代码 :
#kill_vg_user.sh vg_name
#kill_vg_user.sh erpapp_vg
if [ $# -le 0 ] ;then
echo "no para, example:kill_vg_user.sh erpapp_vg "
exit
fi
#main
SCRIPTS_PATH=`dirname ${0}`
df -k|awk '{print $7 }'|grep -v Mounted >/tmp/fs_mounted.txt
for i in `lsvg -l $1 |grep -vE "N/A|vg|MOUNT"|awk '{print $7}'`
do
if [ `grep -c $i /tmp/fs_mounted.txt` -ge 1 ] ; then
echo kill_fs_user.sh $i
$SCRIPTS_PATH/kill_fs_user.sh $i
fi
done
|
调用的 kill_fs_user.sh 代码 :
#kill_fs.sh fs_name
#kill_fs.sh /oracle
if
[ ` df -k|grep $1|grep -v grep|awk '{print $7}'|grep -v [0-9a-zA-Z]$1
|grep -v $1[0-9a-zA-Z_-]|wc -l` -eq 1 ] ;
then
fuser -kcux $1
fi
|
实际使用 stop_host1 代码:
MACHINE=host1
VGNAME=host1vg
HA_LOG=log/stop_"$MACHINE"_app`date +%C%y%m%d%H%M`.log
SCRIPTS_PATH=`dirname ${0}`
if [ "$SCRIPTS_PATH" = "." ];then
SCRIPTS_PATH=`pwd`
fi
cd $SCRIPTS_PATH
>$HA_LOG
/home/scripts/comm/tail_log.sh stop_app $SCRIPTS_PATH/$HA_LOG "!!!!!!!!!!!!!!!!!!|
stopped!|Waiting---|stopping---|successful!" "successful!" >>/tmp/ha_app.out &
sleep 1
/home/scripts/$MACHINE/stop_"$MACHINE"_app ha >$HA_LOG 2 >&1#stop_host1
/home/scripts/comm/kill_vg_user.sh $VGNAME
exit 0
|
同步 HA 的脚本
由于 HA 切换后,切换的时间有可能超过一天,而切换时很可能另一台机器已无法开启,不能拿到最新的 crontab 和后台相关脚本,所以 crontab 和脚本最好能每天自动同步。
编写 sync_HA.sh
在 host1 上编写
OMACHINE=host2
rsh $OMACHINE "cd /home/scripts;tar -cvf ${OMACHINE}_scripts.tar $OMACHINE"
rcp $OMACHINE:/home/scripts/${OMACHINE}_scripts.tar /home/scripts
cd /home/scripts
rm -rf $OMACHINE
tar -xvf ${OMACHINE}_scripts.tar
rcp $OMACHINE:/var/spool/cron/crontabs/root /home/scripts/$OMACHINE/crontab_${OMACHINE}
|
###sync crontab
0 0 * * * /home/script/sync_HA.sh >/tmp/sync_HA.log 2>&1
|
同样在 host2 上编写,但注意 OMACHINE 修改为 host1。
经验共享
异常情况的人工干预
本文没有详细描述 HACMP 异常情况的处理,这是因为每个系统每次异常可能情况都不一样,而且一般来说,安装 HACMP 的系统都是核心系统,给你留的时间会非常短,快速处理的要求更严格。
所以,我们试图找到一个办法,来应对 HACMP 本身异常 99% 的异常情况,而对于脚本和系统参数的不匹配,只能通过找出问题所在来处理。
场景 1:host1 出现问题,但 HACMP 没有切换成功,处于僵死状态
-
快速强制停止 host1 机器运行
-
确保应用服务继续
在 host2 上使用手工启动 host1_RG,
smitty hacmp->System Management (C-SPOC)-> HACMP Resource Group and Application Management ->Bring a Resource Group Online 选择 host1_RG,host2
Bring a Resource Group Online
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[Entry Fields]
Resource Group to Bring Online host1_RG
|
Node on Which to Bring Resource Group Online host2 即在 host2 上启动 host1 的资源组。
-
检查和确认应用已可以访问。
如发现仍然不正常,请参考场景 2 的第 3 步。
-
检查和修正问题。
-
host2: 强制停止 HACMP;
-
重新启动 host1,确认无硬件问题;
-
检查 HACMP 的环境,阅读 /tmp/hacmp.out 等 log,看看能否找出问题所在;
-
修正 HACMP 或其它部分
-
确认无误申请短暂停机时间,重起 HACMP 回原。
场景 2:host1 出现问题,HACMP 切换过来,但处于僵死状态
由于此场景的起因有很多,3,4 点只能根据具体系统来细化,但还是强烈建议每个系统编制一份手工切换手册,详细列明 HACMP 不可用的情况下如何手工启动应用,以备紧急情况使用。
-
停止 host1 机器运行
-
host2 强制停止 HACMP
-
检查和修正目前状况
HACMP 异常情况修正表
|
序号
|
目前状况
|
目前状况
|
修正
|
备注
|
|---|
|
1
|
服务 IP 地址
|
无
|
smitty tcpip 手工添加
| | |
2
|
vg 状况
|
未 varyon
|
varyonvg 手工执行
|
如果锁住加 varyonvg -bu
| |
3
|
fs 状况
|
未 mount
|
mount 手工执行
|
如损坏,执行 fsck -y
| |
4
|
应用程序状况
|
执行异常
|
强制停止,重起
|
确认 1-3 ok 再做
|
-
手工修正目前状况
-
检查和修正问题
-
重新启动 host1,确认无硬件问题;
-
检查 HACMP 的环境,阅读 /tmp/hacmp.out 等 log,看看能否找出问题所在;
-
修正 HACMP 或其它部分;
-
确认无误申请短暂停机时间,重起 HACMP 回原。
其它有用的经验
HACMP 自动启动的实现
有的系统,希望开机就把 HACMP 自动启动,也就不需要人工干预就启动了应用,这需要 clstart 时指明 :
[host1][root][/]>smitty clstart
Start Cluster Services
* Start now, on system restart or both restart
Start Cluster Services on these nodes [host1]
BROADCAST message at startup? true
Startup Cluster Information Daemon? false
Reacquire resources after forced down ? false |
这样,HACMP 会自动才 /etc/initab 里增加以下一行
hacmp6000:2:wait:/usr/es/sbin/cluster/etc/rc.cluster -boot -b # Bring up Cluster
Stop Cluster Services
|
这样就实现了自动启动 HACMP 和应用。
如果希望取消这种设定,需要运行 clstop:
[host1][root][/]>smitty clstop
Stop Cluster Services
* Stop now, on system restart or both restart
Stop Cluster Services on these nodes [bgbcb04]
BROADCAST cluster shutdown? true
* Shutdown mode graceful
|
可以看到 /etc/initab 里这一行消失了。
HACMP 的 too long 报警广播的修正
在有些系统运行很长时间的情况下,有可能停止的时间会超出我们预期,如 oracle 数据库的某些资源被交换到 Pagespace 里。缺省如果超过 180s,就会广播报警,直至 HACMP 异常。这时你可以修正这个参数,以避免广播出现。
smitty hacmp->Extended Configuration ->Extended Event Configuration ->Change/Show Time Until Warning
Max. Event-only Duration (in seconds) [360]
Max. Resource Group Processing Time (in seconds) [360]
Total time to process a Resource Group event 12 minutes and 0 seconds
before a warning is displayed
NOTE: Changes made to this panel must be
propagated to the other nodes by
Verifying and Synchronizing the cluster
|
同样,修改后需要 HACMP 同步。
HACMP 的 DMS 问题的修正
DMS(deadman switch) 是用来描述系统 kernel extension 用的,它可以在系统崩溃前关闭系统,并产生 dump 文件,以供日后检查使用。 DMS 存在的目的是为了保护共享外置硬盘及数据,当系统挂起时间长过一定限制时间时,DMS 会自动关闭该系统,由 HACMP 的备份节点接管系统,以保护数据和业务的正常进行,避免潜在的问题,特别是外置磁盘阵列。
errpt 确认 DMS 的发生:
LABEL: KERNEL_PANIC
IDENTIFIER: 225E3B63
Date/Time: Thu Apr 25 21:26:16
Sequence Number: 609
Machine Id: 0040613A4C00
Node Id: localhost
Class: S
Type: TEMP
Resource Name: PANIC
Descrīption
SOFTWARE PROGRAM ABNORMALLY TERMINATED
Recommended Actions
PERFORM PROBLEM DETERMINATION PROCEDURES
Detail Data
ASSERT STRING
PANIC STRING
|
DMS 起作用的原因主要有以下几点:
-
某种应用程序的优先级大于 clstrmgr deamon , 导致 clstrmgr 无法正常重置 DMS 计数器;
-
在系统上存在大量 I/O 操作,导致 CPU 没有时间相应 clstrmgr deamon;
-
内存泄漏或溢出问题;
-
大量的系统错误日志活动。
换句话说,当以上情况出现时,HACMP 认为系统崩溃,会自动切换到另一台节点机上去,这是我们想要的结果吗?
一般情况下,原有的缺省设置无需更改。但由于系统运行了较长时间后,负荷可突破原有设计(平均小于 45%),而且某些情况下会持续 100%,我们就不希望发生切换。如果发生了 DMS 造成的切换,我们先延长 HACMP 的确认的时间,即调整心跳线的 诊断频率
:
smitty hacmp->Extended Topology Configuration ->Configure HACMP Network Modules -> Change a Network Module using Predefined Values 选择 r232
* Network Module Name rs232
Description RS232 Serial Protocol
Failure Detection Rate Slow
NOTE: Changes made to this panel must be
propagated to the other nodes by
Verifying and Synchronizing the cluster
|
同样,记得同步 HACMP。
如果还是发生 DMS 导致的 HACMP 切换,排除异常后,只好禁用 DMS 了, 这点 IBM 不推荐,因为有可能造成切换时数据丢失或损坏。
修改 rc.cluster 文件增加 -D 参数:
[host1][root][/]> vi /usr/es/sbin/cluster/etc/rc.cluster
if [ "$VERBOSE_LOGGING" = "high" ]
then
clstart -D -smG $CLINFOD $BCAST
else
clstart -D -smG $CLINFOD $BCAST 2>/dev/console
fi
|
重起 HACMP 生效。
SNMP 的调整(AIX5.3 不需要)
在 AIX 5.2 下要对 SNMP 做一些调整才可以看到真正的 HACMP 的状态。
具体来说, AIX 5.2 的 SNMP 默认是 version 3 :
[host1][root][/]>ls -l |grep snmp
lrwxrwxrwx 1 root system 8 Apr 08 17:55 clsnmp -> clsnmpne
-rwxr-x--- 1 root system 83150 Mar 12 2003 clsnmpne
-rwxr-x--- 1 root system 55110 Mar 12 2003 pppsnmpd
lrwxrwxrwx 1 root system 9 Apr 08 17:55 snmpd -> snmpdv3ne
|
而 HACMP 只支持 SNMP version 1 . 所以我们要做一下调整:
stopsrc -s snmpd
/usr/sbin/snmpv3_ssw -1
startsrc -s snmpd
[host1][root][/usr/sbin]>ls -l |grep snmp
lrwxrwxrwx 1 root system 18 Apr 21 13:40 clsnmp -> /usr/sbin/clsnmpne
-rwxr-x--- 1 root system 83150 Mar 12 2003 clsnmpne
-rwxr-x--- 1 root system 55110 Mar 12 2003 pppsnmpd
lrwxrwxrwx 1 root system 17 Apr 21 13:40 snmpd -> /usr/sbin/snmpdv1
|
小结
本部分论述了富有特色的 HACMP 脚本编著,也就特殊情况下的一些 HACMP 场景的处理做了详尽的描述,相信对希望进一步深入掌握 HACMP 的读者会有所帮助,对现实工作具有较强的参考意义。总的来说,本文采用类似教程的方式,一步一步由浅入深,细致完整的描述了 IBM HACMP 实施的各个方面,是不可多得的 HACMP 的使用手册。在最后,提供给您 2 个实用的 HACMP 配置模板,您可以在下载部分获得到。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| HACMP 实用配置模板 | template.zip | 9891.84KB | HTTP |
|---|
参考资料 学习
- 本系列的 第 1 部分:设计和安装 :本文向您介绍 HAMCP 的设计和安装过程。
- 本系列的 第 2 部分:配置 :经过了第 1 部分对于安装和设计方面的讲解,作者将继续通过本文向您介绍在 HACMP 配置过程中需要完成的内容以及需要注意的事项。
- 本系列的 第 3 部分:测试和维护 :本文向您介绍了在 HACMP 安装配置完毕后需要进行的测试工作,以及在 HACMP 正式上线后需要定期进行的维护工作。
- HACMP 认证系列文章的 第 1 部分 :本文包含对 IBM High Availability Cluster Multi-Processing (HACMP) for AIX 产品系列的介绍,以及作为 IBM 高可用性产品基础的概念。
- HACMP 认证系列文章的 第 2 部分 :本文向您介绍了在计划和设计 HACMP 时候需要涉及的方方面面的内容,比如节点规划、硬件配置、软件配置等。让您全面了解实施 HACMP 前需要进行的各项准备工作。
- HACMP 认证系列文章的 第 3 部分 (1):在本文中,我们将向您介绍一些基本的 HACMP 安装问题和各种安装过程。
- HACMP 认证系列文章的 第 3 部分 (2):本文将继续 HACMP 安装和配置过程的介绍,着重介绍了 HACMP 在定义、配置节点以及配置节点之间连接的内容。
- HACMP 认证系列文章的 第 3 部分 (3):在本文中,我们将介绍 HACMP 在配置资源组时候需要完成的内容。
- HACMP 认证系列文章的 第 4 部分:尽管 HACMP 是一个功能强大的组件,如果没有正确的测试,在实现后也会成为一场灾难。在本文中,我们将详细介绍一些基本的测试过程。
-
IBM System p5 服务器 HACMP 方案安装指南 : 本教程向您详细地描述了 HACMP 在 IBM System p5 系列服务器上的安装过程,一步一步地通过示例向您演示了整个安装步骤,包括系统的准备,关键软件包的安装,安装过程中的各项参数的选择等重要步骤。
-
使用 HACMP/XD + GLVM 实现高可用性集群 :本教程向您详细地描述了 HACMP/XD+GLVM 在 IBM System p5 系列服务器上的安装过程,一步一步地通过示例向您演示了整个安装步骤,包括系统的准备,关键软件包的安装,安装过程中的各项参数的选择等重要步骤。
-
使用 SSA Target 模式配置 HACMP :HACMP 在客户环境下有着广泛的应用,如果客户环境中使用 7133 做共享存储,可以直接利用 SSA 做心跳。本文主要描述 SSA 卡做心跳的规划、配置、检测过程,读者可以根据文章的描述在自己的环境中学习配置。
-
AIX and UNIX 专区 :developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
-
AIX and UNIX 新手入门 :访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
-
AIX Wiki:发现 AIX 相关技术信息的协作环境。
- 按主题搜索“AIX and UNIX”库:
-
Safari 书店 :访问此电子参考资料库可查找特定的技术资源。
-
developerWorks 技术事件和网络广播 :了解最新的 developerWorks 技术事件和网络广播。
-
Podcasts:收听 Podcast 并与 IBM 技术专家保持同步。
获得产品和技术
-
IBM 试用软件 :从 developerWorks 可直接下载这些试用软件,您可以利用它们开发您的下一个项目。
讨论
关于作者  | |  | 辛旻,拥有西安交通大学学士学位,上海宝信系统服务部技术支持中心 IBM 主机技术路线负责人,有从事 AIX 工作的多年实践经验,曾公开发表过《AIX 操作系统的内存调度机制剖析》一文,对 IBM psystem 平台有较为深入的掌握,已通过8门 AIX 相关认证,同时获得 CATE 高级认证。 |
对本文的评价
|