opensolaris下的crash和core

什么是core文件:

core files which are images of user applications that are written when the
application terminates abnormally.

core文件生成的一些设置可以使用coreadm,具体的参数可参见:
http://docs.sun.com/app/docs/doc/816-5166/coreadm-1m?l=en &a=view&q=coreadm+

设定core文件生成的路径
coreadm -e global -g /yourpath/core.%f.%p

如何生成core文件:

手动生成core文件并指定生成的路径
gcore -o ./ 19406(在-o指定的目录生成core文件)
kill -n 6 26452(在coreadm命令指定的目录生成core文件)

(列出系统支持的signal

kill -l)
程序自己down掉(会生成两个dump,一个是在程序自己的启动目录,另一个是在coreadm命令指定的目录)

什么是crash文件:

crash文件就是系统在发生某种故障时,系统自己将当前memory的状态保存起来,然后在重启的过程中通过

savecore命令将memory状态保存到coreadm所指定的目录中去

crash文件生成的一些设置可以使用dumpadm,具体的参数可参见:
http://docs.sun.com/app/docs/doc/805-7229/6j6q8svi0?l=en &a=view

设定生成的路径
dumpadm -s /yourpath

如何生成crash文件:
不用重启生成系统dump文件
savecore -L
强制系统生成dump文件
reboot -d

例子:在我的系统上运行savecore -L,生成以下的文件:

$ ls -alh
total 2.1G
drwxr-xr-x 2 root root 5 Jul 9 14:55 .
drwxr-xr-x 3 root root 9 Jul 9 17:46 ..
-rw-r–r– 1 root root 2 Jul 9 14:55 bounds
-rw-r–r– 1 root root 1.8M Jul 9 14:54 unix.0
-rw-r–r– 1 root root 2.1G Jul 9 14:55 vmcore.0

有关savecore的一些注解:

( Live system crash dumps can only be performed if you have configured
your system to have a dedicated dump device using dumpadm (1M).
savecore -L does not suspend the system, so the contents of memory continue to
change while the dump is saved. This means that live crash dumps are not
fully self-consistent
.)
savecore refs:
http://docs.sun.com/app/docs/doc/816-5166/savecore-1m?l=en &a=view&q=savecore+

总结性的参考:
http://developers.sun.com/solaris/articles/manage_core_dump.html

什么是SLA和PUE

SLA
SLA:Service-Level Agreement的缩写,意思是服务等级协议。
服务等级协议是关于网络服务供应商和客户间的一份合同,其中定义了服务类型、服务质量和客户付款等术语。
http://baike.baidu.com/view/163802.htm
PUE
Power Usage
Effectiveness的简写,是评价数据中心能源效率的指标,是数据中心消耗的所有能源与IT负载使用的能源之比,是DCIE(data center
infrastructure
efficiency )的反比。
PUE = 数据中心总设备能耗/IT设备能耗,PUE是一个比率,基准是2,越接近1表明能效水平越好
http://baike.baidu.com/view/2067555.htm

在opensolaris下使用dbx

之所以使用dbx而不是用gdb是因为:

2009.06 opensolaris 中的gdb 版本是32位的,所以不能debug 64位的程序;
http://defect.opensolaris.org/bz/show_bug.cgi?id=2759

dbx是SunStudioExpress自带的调试工具,如何安装sunstudio,可参见:

http://blog.csdn.net/lantianjialiang/archive/2010/04/27/5532713.aspx

配置好IPS后,通过pkg install sunstudio,就可以安装好了;

安装完成后默认在/opt/SunStudioExpress/路径;

如何使用dbx(我的机器是64位的,以调试snmpd为例):

cd /opt/SunStudioExpress/bin
./dbx /usr/sbin/amd64/snmpd
loadobject -load yourSoFile.so
stop at zeusTargets.c:74

run -f -L -q -V -c/etc/sma/snmp/snmpd.conf -DALL
pathmap (Finding Source and Object Files)
print
whatis (prints the declarations or definitions of identifiers, structs, types
and C++ classes, or the type of an expression.)
whereis (Locating Symbols)
list (Navigating To a File)
where (Finding Your Place on the Stack)
cont (continue)
status (current status)

refs:
http://docs.sun.com/app/docs/doc/819-5257?l=en

强制将需要的lib链接到binary中去

如果是一些标准的include,ld知道使用那些so文件,所以在编译时不需要指定要将那些lib链接到out文件中去,
但是如果是自己定义的一些include的话,就要在命令行指定要将那些lib链接到out文件中去;
例如test.c:

#include <stdio.h>

int main()
{
int x=100;
printf(“Valx=%d/n”,x);

return 0;
}

cc -o test test.c

ldd test

libc.so.1 => /lib/libc.so.1
libm.so.2 => /lib/libm.so.2
强制将libnvpair.so链接到test中去

cc -o test -lnvpair test.c

ldd test

libnvpair.so.1 => /lib/libnvpair.so.1
libc.so.1 => /lib/libc.so.1
libnsl.so.1 => /lib/libnsl.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
libm.so.2 => /lib/libm.so.2
使用全路径和-l是一样的效果

cc -o test /lib/libnvpair.so test.c

ldd test

libnvpair.so.1 => /lib/libnvpair.so.1
libc.so.1 => /lib/libc.so.1
libnsl.so.1 => /lib/libnsl.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
libm.so.2 => /lib/libm.so.2

how linux find dynamic lib?

1.LD_LIBRARY_PATH环境变量
2.system default path:
linux:
file: /etc/ld.so.conf
trusted directories: /lib /usr/lib
通过命令 ldconfig 来设置:
http://linux.die.net/man/8/ldconfig
solaris:
file: /var/ld/ld.config
crle command:
http://docs.sun.com/app/docs/doc/819-2239/crle-1?a=view
3.write rpath to binary(在编译的时候通过rpath来将寻找链接库的路径写道binary):
LD_RUN_PATH环境变量
-R gcc的参数

如果找到include文件的:

gcc首先查找-I选项指定的目录,然后查找系统的头文件目录(通常是/usr/include);

而对于用引号包含的头文件,gcc首先查找包含头文件的.c文件所在的目录,然后查找-I选项指定的目录,然后查找系统的头文件目录。

参见:

http://www.eyrie.org/~eagle/notes/rpath.html
http://learn.akae.cn/media/ch20s04.html
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

java的string format

总的格式是:

%[argument_index$][flags][width][.precision]conversion

例如:
%2$-5.2s
//2$:取第二个参数
//-: 指定为左对齐,默认右对齐
//5:最大输出宽度为20,不够会补空格,实际若超过则全部输出
//.2:在此表示输出参数2的最大字符数量,如果是浮点数字,则表示小数部分显示的位数
//s :表示输入参数是字符串

refs:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html