Linux系统应用经验总结

44 篇文章 0 订阅
17 篇文章 1 订阅

 

1.  日志类

1.1.  正常消息流程跟踪

MO消息匹配流程

3种消息类型:MO、MOSR、MO状态报告

2个匹配过程:

         1)3与5,匹配点在网关,3发送的fwd包中Msg_id字段表示匹配ID,5接收的fwd包中msg_content字段中带有Msg_id字段,用于匹配,格式请参考点对点互通协议。

         2)2与7,匹配点在SMSC,5流程中的MOSR的状态会在7流程中发送给SMSC,实现SMPP协议到点对点协议的互通,2发送的deliver_rsp包中message_id字段表示匹配ID,为十六进制,7发送的submit包中short_message字段带有id字段用于匹配,为十进制,格式“id:IIIIIIIIII sub:SSS  dlvrd:DDD  submit date: YYMMDDhhmm done date:YYMMDDhhmm  stat:DDDDDDD err: E Text:……”。

MT消息匹配流程

3种消息类型:MT、MTSR、MT状态报告

2个匹配过程:

         1)4与5,匹配点在网关,4接收的submint_rsp包中message_id字段表示匹配ID,为十六进制,5接收的deliver包中short_message字段中带有id字段用于匹配,为十进制,格式请参考SMPP3.3或SMPP3.4协议。

         2)1与7,匹配点在SMG,5流程中的MTSR的状态会在7流程中发送给SMG,实现点对点协议到SMPP协议的互通,1接收的fwd包中message_id字段表示匹配ID,7发送的fwd包中msg_content字段带有id字段,用于匹配,格式请参考点对点互通协议。

1.2.  流速统计

1.1. 

常用流速统计脚本

#!/bin/awk -f

BEGIN{

       FS=":";

       mo=0; mosr=0; srmo=0; mt=0; mtsr=0; srmt=0;

       date=""; hour_old=""; min_old="";second_old="";

       print"----------------------------------------------------------------------------------------";

       print "发送时间\t\t\tMO\tMOSR\tSRMO\tMT\tMTSR\tSRMT";

       print"----------------------------------------------------------------------------------------";

}

{

       if (NF < 2) next;

       date=substr($1,2,10);

       hour_new=substr($1,13,2);

       min_new=substr($2,1,2);

       second_new=substr($3,1,2);

       if(hour_new==hour_old && min_new==min_old ) {

                if($6~/接收MO成功/) mo+=1;

                if($6~/发送MT成功/) mt+=1;

                if($6~/接收MTSR成功/) mtsr+=1;

                if($6~/发送SRMO成功/) srmo+=1;

       }

       else{

                if (hour_old != "")print date""hour_old":"min_old":"second_old"\t\t"mo"\t"mosr"\t"srmo"\t"mt"\t"mtsr"\t"srmt;

                hour_old=hour_new;min_old=min_new; second_old=second_new;

                mo=0; mosr=0; srmo=0; mt=0;mtsr=0; srmt=0;

                if(hour_new==hour_old&& min_new==min_old ) {

                        if($6~/接收MO成功/) mo+=1;

                        if($6~/发送MT成功/) mt+=1;

                        if($6~/接收MTSR成功/) mtsr+=1;

                        if($6~/发送SRMO成功/) srmo+=1;

                }

       }

}

END{

       print date""hour_old":"min_old":"second_old"\t\t"mo"\t"mosr"\t"srmo"\t"mt"\t"mtsr"\t"srmt;

       print "第一秒和最后一秒统计分析因记录不全,可能不准!"

}

 

统计某个网元的流速

grep 发送MT成功*SMSC*.log|grep 13000202443|grep 17:21:40 |wc -l

grep 接收MTSR成功*SMSC*.log|grep 13000202443|grep 17:21:40 |wc -l

这样就可以统计出该网元是否正常回复状态报告,多个核心模块都需要进行统计。

1.3.  积压量统计

1.2. 

按网元组织队列

<2013/11/12 17:23:52:279707(1165900001)INFO>:|___________________________________

<2013/11/12 17:23:52:279721(1165900001)INFO>:| Total message in core:    [0]

<2013/11/12 17:23:52:279736(1165900001)INFO>:| total msg in trashbox:    [0]

<2013/11/12 17:23:52:279749(1165900001)INFO>:| total SR  in M      :    [0]

<2013/11/12 17:23:52:279761(1165900001)INFO>:| mosr pending is:          [0]

<2013/11/12 17:23:52:279780(1165900001)INFO>:| [MT] remain expired_idx:  [0]

<2013/11/12 17:23:52:279797(1165900001)INFO>:| [MT] remain msgid_idx:    [0]

<2013/11/12 17:23:52:279818(1165900001)INFO>:| [MO] remain expired_idx:  [0]

<2013/11/12 17:23:52:279848(1165900001)INFO>:| [MO] remain msgid_idx:    [0]

<2013/11/12 17:23:52:279893(11659 00001)INFO>:|[CACHE] total msg in cache [0]

<2013/11/12 17:23:52:279912(1165900001)INFO>:| [LOG]msg in logfile_pool:      [55]

<2013/11/12 17:23:52:279925(1165900001)INFO>:|___________________________________

<2013/11/12 17:23:52:279941(1165900001)INFO>:| total msg in smsc(202442):MT[0],MOSR[0]

<2013/11/12 17:23:52:279960(1165900001)INFO>:| total msg in smsc(202443):MT[0],MOSR[0]

<2013/11/12 17:23:52:279974(1165900001)INFO>:| total msg in smsc(202441):MT[0],MOSR[0]

<2013/11/12 17:23:52:279988(1165900001)INFO>:| total msg in smsc(202412):MT[0],MOSR[0]

<2013/11/12 17:23:52:280003(1165900001)INFO>:| total msg in smsc(202421):MT[0],MOSR[0]

<2013/11/12 17:23:52:280021(1165900001)INFO>:| total msg in smsc(202411):MT[0],MOSR[0]

<2013/11/12 17:23:52:280036(1165900001)INFO>:| total msg in smsc(202431):MT[0],MOSR[0]

<2013/11/12 17:23:52:280051(1165900001)INFO>:| total msg in smsc(202413):MT[0],MOSR[0]

<2013/11/12 17:23:52:280067(1165900001)INFO>:| total msg in smsc(202422):MT[0],MOSR[0]

<2013/11/12 17:23:52:280086(1165900001)INFO>:| total msg in smsc(202423):MT[0],MOSR[0]

<2013/11/12 17:23:52:280101(1165900001)INFO>:| total msg in smsc(202432):MT[0],MOSR[0]

<2013/11/12 17:23:52:280116(1165900001)INFO>:| total msg in smsc(202433):MT[0],MOSR[0]

<2013/11/12 17:23:52:280135(1165900001)INFO>:| total msg in smg(002404):MO[0],MTSR[0]

<2013/11/12 17:23:52:280150(1165900001)INFO>:| total msg in SR(SR3):MO[0],MT[0],SR[0]

<2013/11/12 17:23:52:280165(1165900001)INFO>:| total msg in SR(SR1):MO[0],MT[0],SR[0]

<2013/11/12 17:23:52:280185(1165900001)INFO>:| total msg in SR(SR2):MO[0],MT[0],SR[0]

<2013/11/12 17:23:52:280199(1165900001)INFO>:|___________________________________

采用按网元组织队列结构能够清楚的发现哪个外部网元异常。

按消息类型组织队列

<2013/11/12 16:46:50:327658(15175:47260371758816)INFO>:[采集]:___________________________________

<2013/11/1216:47:20:327529(15175:47260371758816)INFO>: [采集]:(M01)MO[1880],MT[0],SR[0],TOTAL[1880]

<2013/11/1216:47:20:327600(15175:47260371758816)INFO>: [采集]:MO[0]

<2013/11/1216:47:20:327704(15175:47260371758816)INFO>: [采集]:SMG(1)(104301)MO[0],MTSR[0],SEND[0],RECV[0]

<2013/11/1216:47:20:327766(15175:47260371758816)INFO>: [采集]:MT[0]

<2013/11/1216:47:20:327831(15175:47260371758816)INFO>: [采集]:SMSC(1)(13800871500)MT[0],MOSR[0],SEND[0],RECV[0]

<2013/11/1216:47:20:327890(15175:47260371758816)INFO>: [采集]:SMSC(2)(13800871501)MT[0],MOSR[0],SEND[0],RECV[0]

<2013/11/1216:47:20:327981(15175:47260371758816)INFO>: [采集]:SMM(1)MO[0],MT[0],SEND[0]

<2013/11/1216:47:20:328088(15175:47260371758816)INFO>: [采集]:CR(1)MO[1880],MT[0],SR[0],SEND[0]

<2013/11/1216:47:20:328150(15175:47260371758816)INFO>: [采集]:TRASH[0],RETRANS[0],CACHE[0],LOGFILE[0]

<2013/11/1216:47:20:328212(15175:47260371758816)INFO>: [采集]:RRULE(0) [0]

<2013/11/1216:47:20:328267(15175:47260371758816)INFO>: [采集]:RRULE(1) [0]

<2013/11/1216:47:20:328333(15175:47260371758816)INFO>: [采集]:RRULE(99) [0]

<2013/11/1216:47:20:328386(15175:47260371758816)INFO>: [采集]:___________________________________

采用按消息类型组织队列具有明显优势,所有同类型外部网元共享队列,只要有一个网元正常就不会造成消息积压。

1.4.  单模块性能不足问题

由于现网模块部署在各种不同平台下,春节期间经常会出现T2000的机器上出现消息积压,而HP刀片上运行正常,

此时,最简单的处理方法是减少T2000平台的对外连接,可以通过动态更新指定模块功能实现。

 

2.  脚本类

1.   

2.   

2.1.  .cshrc脚本解析

set filec                                #添加该定义后可以按“esc”键补全文件名

setenv EDITOR vi              #定义crontab编辑器

setenv TIMEZONE 'CST'  #定义时区

setenv LANG 'zh'               #定义本地语言

setenv LC_ALL 'zh'            #定义本地语言,它们之间优先级的关系:LC_ALL > LC_* >LANG

setenv NLS_LANG 'Simplified Chinese'                       #以下3项为数据库入库编码方式

setenv NLS_CHARACTERSET 'ZHS16CGB231280'

setenv NLS_NCHAR_CHARACTERSET   'ZHS16CGB231280'

setenv MIBS ALL               #snmp库告警用

 

set path = ( /usr/bin /usr/local/bin/usr/sfw/bin )   #sparc+Solaris

set path = ( /usr/sfw/bin /usr/bin /usr/local/bin)   #x86+Solaris,x86平台下需要用usr/sfw/bin下面的软件

 

另外,项目相关的环境变量,建议以PROJECT为根进行设置

2.2.  .bashrc脚本解析

export TERM='linux'                  #定义终端类型,可以带颜色

export EDITOR='vim'                 #定义crontab编辑器

export TIMEZONE='CST'           #定义时区

export LANG='zh_CN.GB2312'        #定义本地语言

export LC_ALL='zh_CN.GB2312'     #定义本地语言,它们之间优先级的关系:LC_ALL> LC_* >LANG

export NLS_LANG='Simplified Chinese'                      #以下3项为数据库入库编码方式

export NLS_CHARACTERSET='ZHS16CGB231280'

exportNLS_NCHAR_CHARACTERSET='ZHS16CGB231280'

export MIBS=ALL              #snmp库告警用

 

另外,项目相关的环境变量,建议以PROJECT为根进行设置

 

2.3.  crontab定时任务

crontab命令格式:M H D m d cmd(分 时 日 月 周 命令)

M: 分钟(0-59)。

H:小时(0-23)。

D:天(1-31)。

m: 月(1-12)。

d: 一星期内的天(0~6,0为星期天)

crontab file [-u user]-用指定的文件替代目前的crontab.

crontab-[-u user]-用标准输入替代目前的crontab.

crontab-1[user]-列出用户目前的crontab.

crontab-e[user]-编辑用户目前的crontab.

crontab-d[user]-删除用户目前的crontab.

crontab-c dir- 指定crontab的目录.

 

crontab文件的一些例子:

 

30 21 * * * /usr/local/etc/rc.d/lighttpdrestart

上面的例子表示每晚的21:30重启apache。

 

45 4 1,10,22 * */usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月1、10、22日的4 : 45重启apache。

 

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpdrestart

上面的例子表示每周六、周日的1 : 10重启apache。

 

0,30 18-23 * * */usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

 

0 23 * * 6 /usr/local/etc/rc.d/lighttpdrestart

上面的例子表示每星期六的11 : 00 pm重启apache。

 

* */1 * * * /usr/local/etc/rc.d/lighttpdrestart

每一小时重启apache

 

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpdrestart

晚上11点到早上7点之间,每隔一小时重启apache

 

0 11 4 * mon-wed/usr/local/etc/rc.d/lighttpd restart

每月的4号与每周一到周三的11点重启apache

 

0 4 1 jan * /usr/local/etc/rc.d/lighttpdrestart

一月一号的4点重启apache

 

2.4.  FTP上传话单标准做法

作用:以临时文件方式上传文件,完毕后改回原名

缺点:当网络异常时,可能会造成文件丢失

#!/bin/bash

 

IP=10.10.18.8

USER=com30

PASSWD=com30

 

myftp(){

         ftp-n $IP <<END_SCRIPT

         quoteUSER $USER

         quotePASS $PASSWD

         cd./nm

         bin

         put$1 $2

         rename$2 $1

         quit

         END_SCRIPT

         echo"ftp" $1 $2>> ftp.log

}

 

file_list=`find . -name "*.CDR"-type f |sort`

for file in $file_list

do

         if[ "${file##*.}" = "CDR" ]

then

         tmp_file=${file/%"CDR"/"tmp"}

         myftp$file $tmp_file

         mv$file ../boss

fi

done

exit 0

 

2.5.  批量修改文件内容

作用:用于批量修改目录下所有文件中指定的内容

#!/bin/bash

file_list=`find $1 -name "*.c" -typef `

for fn in $file_list

do

       ffnt="$fn.temp"

       echo "Processing $fn ...... "

       sed "s/$2/$3/g" $fn > $ffnt

       mv -f $ffnt $fn        

done

 

2.6.  批量删除SHM共享内存

作用:由于ipcrm命令不支持多个一起删除功能,需要用脚本实现

ipcs -m|grep $USER|awk '{print $2}'|xargs-t -I{} ipcrm -m {}

 

2.7.  输出2个文本文件中相同的行

作用:用于比较乱序的话单文件

#/bin/awk

awk -F, 'NR==FNR{a[$0]==$0} NR!=FNR{if($0 in a){print}}'  file1 file2

 

 

 

3.  网络连接类

1.   

2.   

3.   

3.1.  网络带宽计算方法

TCP包头:54字节

MO/MT消息包+确认包:313字节+54字节=367字节

应答包+确认包:23字节+54字节=77字节

MO/MT状态报告包+确认包:233字节+54字节=287字节

 

2. 

3. 

3.1. 

专线带宽理论最大计算方法

假设:峰值时MO和MT各一半

OUT:(峰值/2)*(367+54+ 77+54 + 77+54 + 287+54)*8/1024/1024

IN :(峰值/2)*(77+54+ 287+54 + 367+54 + 77+54)*8/1024/1024

总结:1000条/秒需要4M专线

 

专线带宽理论最小计算方法

假设:

(1)所有的确认包都与后续消息包合并

(2)消息内容字段采用最大值140字节的中间值70

计算如下:

OUT:(峰值/2)*(367 +77 + 77+ 287 - 70)*8/1024/1024

IN :(峰值/2)*(77 +287 + 367 + 77 - 70)*8/1024/1024

总结:1000条/秒需要2.8M带宽

 

注:

(1)现网普遍带宽部署要比理论小是因为:

  a)消息包中内容字段按140字节计算,实际值会小一些,但是不太多。

 b)1.b确认包可以与1.c消息包合并,但是是否合并由操作系统根据发包速度决定,计算带宽时最好分开计算。

(2)TCP包头大小并非固定54字节,有的设备包含校验码就会大一些,例如河南网关TCP包头为66字节。

(3)总结:500条/秒  < 2M专线最大消息速度 < 714条/秒

3.2.  Solaris系统下采用snoop抓包

文本命令格式:snoop  -ta  -x54  [hostip地址] and [port 端口号]

二进制命令格式:snoop  -ta  -x54  [hostip地址] and [port 端口号]  -o snoop.cap

注:一般情况下链路层14字节,IP层20字节,TCP层20字节,所以snoop抓包时偏移54字节不输出TCP头部,

但是有的省份TCP层包含校验码长度可能会较多,例如河南TCP层就是32字节,

另外,Solaris与Linux系统间通信是偏移量也是66字节。

当然也可以采用全部显示的方式:snoop  -ta  -x0  [hostip地址] and [port 端口号]

3.1. 

3.2. 

Solaris与Solaris通信

10:35:57.85118     Intel-01 -> 10.10.125.94 TCP D=40883S=7214 Push Ack=1088642243 Seq=3083418559 Len=67 Win=49640

          0: 0000 0043 0000 0005 0000 0000 0000 0015    ...C............

         16: 0000 0031 3332 3132 3334 3030 3030 0000    ...13212340000..

         32: 0031 3338 3030 3030 3132 3334 0000 0001    .13800001234....

         48: 0000 0000 0800 0c65 e06c d562 535f 0096    .......e.l.bS_..

         64: 1f52 17                                    .R.

以上为应用层内容,本例中是SMPP协议包。

Solaris与Linux通信

10:32:30.82028     Intel-01 -> 10.10.126.182 TCP D=11069S=7208 Push Ack=108675516 Seq=3022344739 Len=73 Win=49232 Options=<nop,nop,tstamp225335803 939347037>

          0: 0101 080a 0d6e 59fb 37fd 4c5d 00000049    .....nY.7.L]...I

         16: 0000 0005 0000 0000 0000 0059 0000 0031    ...........Y...1

         32: 3337 3132 3334 3030 3836 0000 0031 3331    3712340086...131

         48: 3030 3030 3132 3334 0000 0001 0000 0000    00001234........

         64: 0800 1265 e06c d562 535f 0000 4300 4400    ...e.l.bS_..C.D.

         80: 5296 1f52 17                               R..R.

红色12个字节多余

3.3.  Linux系统下采用tcpdump抓包

文本命令格式:tcpdump  [host ip地址] and [port端口]  -X  -s 0

二进制命令格式:tcpdump  [host ip地址] and [port端口]  -X  -s 0 -w tcpdum.cap

注:抓本机回环地址的包可以用:tcpdump  -i lo  port 端口  -X  -s0

 

10:18:30.496739 IP 10.10.125.92.gyang-m-smsc> com182.com.28713: P 2679151877:2679151950(73) ack 2922530279 win 49232<nop,nop,timestamp 225191773 937906636>

       0x0000:  4500 007d 7887 4000 3f06b2cd 0a0a 7d5c  E..}x.@.?.....}\

       0x0010:  0a0a 7eb6 1c28 7029 9fb09d05 ae32 45e7  ..~..(p).....2E.

       0x0020:  8018 c050 fe10 0000 0101 080a 0d6c 275d  ...P.........l']

       0x0030:  37e7 51cc 0000 0049 00000005 0000 0000  7.Q....I........

       0x0040:  0000 001c 0000 0031 33373132 3334 3030  .......137123400

       0x0050:  3836 0000 0031 3331 30303030 3132 3334  86...13100001234

       0x0060:  0000 0001 0000 0000 08001265 e06c d562  ...........e.l.b

       0x0070:  535f 0000 4300 4400 52961f52 17         S_..C.D.R..R.

 

3.4.  网络丢包典型案例

一般情况下判断网络问题可以用ping命令定期发送大包测试丢包率,

也可以通过网络抓包提供更直接有利的证据。

9:37:19.93979 211.90.83.254 ->SXTY-PS-ISMG-SV-LTAPP01 TCP D=28122 S=52951 Push Ack=976503152 Seq=2220767726Len=313 Win=65535

 

           0: 0000 0139 0000 0009 0e8b e9de 3130 3335    ...9.....?.1035

          16: 3131 3033 3531 3032 0100 3fcb c901 fbd1    11035102..?.....

          32: ea7a 0101 0100 0000 0000 0000 0000 0000    .z..............

          48: 0100 0000 0000 0000 0000 0000 0000 0000    ................

          64: 0000 0000 0000 0000 0800 0000 0000 0030    ...............0

          80: 3200 0000 0000 0000 0000 00000000 0000    2...............

          96: 0000 0000 0000 0000 0000 0000 0000 0000    ................

        112: 0000 0000 0000 0000 0038 3631 3330 3830    .........8613080

        128: 3334 3930 3935 0000 0000 0000 0000 0138    349095.........8

        144: 3631 3532 3334 3434 3334 3134 0000 0000    615234443414....

        160: 0000 0000 8c00 3467 0800 3100 3900 2d00    ....?4g..1.9.-.

        176: 2d00 3200 3165 e54e cb4f 115f 2051 7065    -.2.1e.N.O._ Qpe

         192: b065 e575 3552 a88f 6665 b06b 3e5c5579    .e.u5R?fe.k>\Uy

        208: 3a66 a84e e565 e763 6265 b096 8691 cd54    :f∟.e.cbe.....T

        224: 2f52 a830 0267 004f 4e63 628d 2d4e f700    /R?.g.ONcb.-N..

        240: 3900 3800 3900 2c65 e764 6962 5875 3552    9.8.9.,e.dibXu5R

        256: a862 9800 3100 3000 3000 3065 e75b b675    ╞..1.0.0.0e.[.u

        272: 3562 4b67 3a62 9800 3600 3000 3030 0257    5bKg:b..6.0.00.W

        288: 3057 405f 2051 7053 9f90 ae65 3f5c 4065    0W@_ QpS...e?\@e

        304: c100 0000 0000 0000 00                     .........

 

9:37:19.94052 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 Push Ack=2220768039 Seq=976503152 Len=23Win=49640

 

           0: 0000 0017 8000 0009 0e8b e9de 3fcb c901    .........?.?...

          16: fbd1 ea7a 0101 00                          ...z...

 

9:37:20.02117 211.90.83.254 ->SXTY-PS-ISMG-SV-LTAPP01 TCP D=28122 S=52951 Push Ack=976503175 Seq=2220768039Len=233 Win=65535

 

           0: 0000 00e9 0000 0009 0e8b 9061 3130 3335    .........?a1035

          16: 3131 3033 3531 3032 0102 3fcb c901 fc03    11035102..?.....

          32: ea83 0101 0100 0000 0000 0000 0000 0000    ................

          48: 0100 0000 0000 0000 0000 0000 0000 0000    ................

           64: 0000 0000 0000 0000 0000 0000 00000030    ...............0

          80: 3200 0000 0000 0000 0000 0000 0000 0000    2...............

          96: 0000 0000 0000 0000 0000 0000 0000 0000    ................

        112: 0000 0000 0000 0000 0031 3535 3336 3032    .........1553602

        128: 3237 3738 0000 0000 0000 0000 0000 0131    2778...........1

        144: 3532 3334 3036 3631 3539 0000 0000 0000    5234066159......

        160: 0000 0000 3c49 2654 0012 c00f c044 454c    ....<I&T.....DEL

        176: 4956 5244 3133 3034 3138 3039 3337 3133    IVRD130418093713

        192: 3034 3138 3039 3337 3135 3533 3630 3232    0418093715536022

        208: 3737 3800 0000 0000 0000 0000 0000 9b07    778...........?

        224: ea00 0000 0000 0000 00                     .........

 

9:37:20.02162 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 Push Ack=2220768272 Seq=976503175Len=23 Win=49640

 

           0: 0000 0017 8000 0009 0e8b 9061 3fcb c901    .........?a?...

          16: fc03 ea83 0101 00                          .......

 

9:37:20.03821 211.90.83.254 ->SXTY-PS-ISMG-SV-LTAPP01 TCP D=28122 S=52951 Ack=976503175 Seq=2220768272 Len=1460 Win=65535

 

     0: 0000 0123 0000 0009 0e8a 9283 3130 3335    ...#........1035

    16: 3131 3033 3531 3032 0100 3fcb c901 fbd1    11035102..?.....

    32: ea8c 0101 0100 0000 0000 0000 0000 0000    .?.............

    48: 0100 0000 0000 0000 0000 0000 0000 0000    ................

    64: 0000 0000 0000 0040 f500 0000 0000 0030    .......@.......0

省略….

  1392: 0000 0001 2300 0000 090e 8bf9 0931 3033    ....#.....?.103

//这条消息是不完整的,后面没有继续                       

  1408: 3531 3130 3335 3130 3201 003f cbc9 01fb    511035102..?....

  1424: d1ea ba01 0101 0000 0000 0000 0000 0000    ................

  1440: 0001 0000 0000 0000 0000 0000 0000 0000    ................

  1456: 0000 0000                                  ....

 

 

9:37:20.05827 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 Ack=2220769732 Seq=976503198Len=0 Win=48180

 

9:37:20.36149 211.90.83.254 ->SXTY-PS-ISMG-SV-LTAPP01 TCP D=28122 S=52951 Ack=976503198 Seq=2220770434 Len=1460 Win=65535

//发送端丢包,没有继续使用seq=2220769732,中间丢了702个字节

     0: 0000 012d 0000 0009 0e8b 860b 3130 3335    ...-.....?.1035

    16: 3131 3033 3531 3032 0100 3fcb c901 fbd1    11035102..?.....

    32: ead5 0101 0100 0000 0000 0000 0000 0000    ................

    48: 0100 0000 0000 0000 0000 0000 0000 0000    ................

    64: 0000 0000 0000 0040 f500 0000 0000 0030    .......@.......0

    80: 3200 0000 0000 0000 0000 0000 0000 0000    2...............

    96: 0000 0000 0000 0000 0000 0000 0000 0000    ................

省略...

  1296: 0000 0000 e900 0000 090e 8c0d 1931 3033    ..........?.103

  1312: 3531 3130 3335 3130 3201 023f cbc9 01fc    511035102..?....

  1328: 03eb 0201 0101 0000 0000 0000 0000 0000    ................

  1344: 0001 0000 0000 0000 0000 0000 0000 0000    ................

  1360: 0000 0000 0000 0000 0000 0000 0000 0000    ................

  1376: 3032 0000 0000 0000 0000 0000 0000 0000    02..............

  1392: 0000 0000 0000 0000 0000 0000 0000 0000    ................

  1408: 0000 0000 0000 0000 0000 3133 3239 3337    ..........132937

  1424: 3638 3938 3100 0000 0000 0000 0000 0001    68981...........

  1440: 3133 3735 3336 3338 3230 3700 0000 0000    13753638207.....

  1456: 0000 0000                                  ....

 

9:37:20.36156 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 Push Ack=2220769732Seq=976503198 Len=115 Win=49640

//网关一直在等待2220769732后续的包

     0: 0000 0017 8000 0009 0e8a 9283 3fcb c901    ............?...

    16: fbd1 ea8c 0101 0000 0000 1780 0000 090e    ...?...........

    32: 8be4 913f cbc9 01fb d1ea 9501 0100 0000    ?.?............

    48: 0017 8000 0009 0e8b f810 3fcb c901 fbd1    .......?.?.....

    64: eaa0 0101 0000 0000 1780 0000 090e 8bda    .?...........?

    80: e13f cbc9 01fb d1ea 9e01 0100 0000 0017    .?......?......

    96: 8000 0009 0e8b eca4 3fcb c901 fbd1 eab1    .....嬱?.......

  112: 0101 00                                    ...

 

9:37:20.36160 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 Ack=2220769732Seq=976503313 Len=0 Win=49640

//网关一直在等待2220769732后续的包

 

9:37:20.56903 211.90.83.254 ->SXTY-PS-ISMG-SV-LTAPP01 TCP D=28122 S=52951 Push Ack=976503313 Seq=2220771894Len=881 Win=65535

     0: 003c 4926 5380 12c0 1791 4445 4c49 5652    .<I&S.....DELIVR

    16: 4431 3330 3431 3830 3933 3731 3330 3431    D130418093713041

    32: 3830 3933 3731 3332 3933 3736 3839 3831    8093713293768981

    48: 0000 0000 0000 0000 0000 0047 ef5d 0000    ...........G.]..

    64: 0000 0000 0000 0000 00e9 0000 0009 0e8b    ...............?

    80: 91df 3130 3335 3131 3033 3531 3032 0102    ..103511035102..

省略....

 

9:37:20.56908 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 Ack=2220769732Seq=976503313 Len=0 Win=49640

//网关一直在等待2220769732后续的包

 

9:37:25.12164 SXTY-PS-ISMG-SV-LTAPP01 ->211.90.83.254 TCP D=52951 S=28122 RstSeq=976503313 Len=0 Win=49640

//5秒超时后断开连接

 

注:判断哪一方先断连的依据是谁发送的Fin包或Rst包。

 

3.5.  网络监听重要工具netstat

常用命令:

-a (all)显示所有选项,默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名

-r 显示路由信息,路由表

-e 显示扩展信息,例如uid等

-s 按各个协议进行统计

-c 每隔一个固定时间,执行该netstat命令。

 

[comm1@com182 bin]$ netstat -a

Active Internet connections (servers andestablished)

Proto Recv-Q Send-Q Local Address               Foreign Address             State     

tcp       0      0localhost.localdomain:2208  *:*                         LISTEN     

tcp       0      0 *:dlip                      *:*                         LISTEN     

tcp       0      0 *:nfs                       *:*                         LISTEN     

tcp       0      0 *:834                       *:*                         LISTEN     

tcp        0     0 *:gyang-smg                *:*                         LISTEN     

 

[comm1@com182 bin]$ netstat -an

Active Internet connections (servers andestablished)

Proto Recv-Q Send-Q Local Address               Foreign Address             State     

tcp       0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN     

tcp       0      0 0.0.0.0:7201                0.0.0.0:*                   LISTEN     

tcp       0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN     

tcp       0      0 0.0.0.0:834                 0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:7203               0.0.0.0:*                   LISTEN     

 

[comm1@com182 bin]$ netstat -anp

(Not all processes could be identified,non-owned process info

 willnot be shown, you would have to be root to see it all.)

Active Internet connections (servers andestablished)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp       0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      -                  

tcp       0      0 0.0.0.0:7201                0.0.0.0:*                   LISTEN      31158/com         

tcp       0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -                  

tcp       0      0 0.0.0.0:834                 0.0.0.0:*                   LISTEN      -                  

tcp        0     0 0.0.0.0:7203                0.0.0.0:*                   LISTEN      31171/com         

 

LN-HTSMG-APP6<comm1>1:netstat -rn

Routing Table: IPv4

 Destination           Gateway           Flags  Ref    Use     Interface

-------------------- ------------------------- ----- ---------- ---------

default              10.34.29.129         UG        1     45869          

10.34.29.128         10.34.29.155         U         1   5515387 bge0     

10.34.29.128         10.34.29.155         U         1          0 bge0:1   

10.34.29.128         10.34.29.155         U         1     29745 bge1     

10.64.79.25          10.34.29.134         UGH       1        40          

10.66.254.128        10.34.29.134         UG        1         0          

10.77.9.10           10.34.29.134         UGH       1        66          

10.77.9.30           10.34.29.134         UGH       1        86          

10.77.9.50           10.34.29.134         UGH       1        47          

10.77.9.70           10.34.29.134         UGH       1        38          

192.168.250.1        192.168.250.2        UH        1          1 sppp0    

127.0.0.1            127.0.0.1            UH        3     81466 lo0      

其中,

U 该路由可以使用

G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地址是直接相连的。

H 该路由是到一个主机。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:网络号,或者网络号与子网号的组合。

4.  进程管理类

3.   

4.   

4.1.  Make编译程序

Make程序的版本必须是GNU Make 3.81

高版本的Make与目前的核心程序不兼容

t2000-2<g-yang>:make -v

GNU Make 3.81

Copyright (C) 2006  Free Software Foundation, Inc.

This is free software; see the source forcopying conditions.

There is NO warranty; not even forMERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

 

This program built forsparc-sun-solaris2.10

4.2.  Gdb调试

常用的gdb命令:

backtrace(bt)   显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)

breakpoint(b)   在程序中设置一个断点

cd                        改变当前工作目录

clear                  删除刚才停止处的断点

commands       命中断点时,列出将要执行的命令

continue(c)       从断点开始继续执行

delete                删除一个断点或监测点;也可与其他命令一起使用

display               程序停止时显示变量和表达时

down                 下移栈帧,使得另一个函数成为当前函数

frame                选择下一条continue命令的帧

info                     显示与该程序有关的各种信息

jump                  在源程序中的另一点开始运行

kill                       异常终止在gdb 控制下运行的程序

list(l)                  列出相应于正在执行的程序的原文件内容

next(n)              执行下一个源程序行,从而执行其整体中的一个函数

print                   显示变量或表达式的值

pwd                    显示当前工作目录

pype                   显示一个数据结构(如一个结构或C++类)的内容

quit                     退出gdb

reverse-search 在源文件中反向搜索正规表达式

run                      执行该程序

search               在源文件中搜索正规表达式

set   variable给变量赋值

signal                 将一个信号发送到正在运行的进程

step(s)               执行下一个源程序行,必要时进入下一个函数

undisplay display命令的反命令,不要显示表达式

until(u)              结束当前循环

up                        上移栈帧,使另一函数成为当前函数

watch                在程序中设置一个监测点(即数据断点)

whatis               显示变量或函数类型

 

1. 

2. 

3. 

4. 

4.1. 

4.2. 

多线程进程调试

[comm1@com182 bin]$ pstree -p 22147

com(22147)-+-com(22149)---{com}(22157)

           |-com(22150)-+-{com}(22159)

           |             |-{com}(22160)

           |             |-{com}(22161)

           |             |-{com}(22165)

           |             `-{com}(22166)

           |-com(22151)

           |-com(22152)

           |-com(22153)

           |-com(22154)---{com}(22167)

           |-com(22155)

           |-com(22156)

           |-com(22158)

           |-com(22162)-+-{com}(22186)

           |             |-{com}(22188)

           |             |-{com}(22189)

[comm1@com182 bin]$gdb com 22162

GNU gdb (GDB) Red Hat Enterprise Linux(7.0.1-32.el5)

Copyright (C) 2009 Free SoftwareFoundation, Inc.

License GPLv3+: GNU GPL version 3 or later<http://gnu.org/licenses/gpl.html>

This is free software: you are free tochange and redistribute it.

There is NO WARRANTY, to the extentpermitted by law.  Type "showcopying"

and "show warranty" for details.

This GDB was configured as"x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

(gdb) info thread

  5Thread 0x4f01d940 (LWP 22208) 0x0000003f3d60e1c1 in nanosleep () from /lib64/libpthread.so.0

  4Thread 0x4fa1e940 (LWP 22209) 0x0000003f3d60e1c1 in nanosleep () from /lib64/libpthread.so.0

  3Thread 0x5041f940 (LWP 22210) 0x0000003f3d60e1c1 in nanosleep () from /lib64/libpthread.so.0

  2Thread 0x50e20940 (LWP 22211) 0x0000003f3ca9a541 in nanosleep () from /lib64/libc.so.6

* 1 Thread 0x2b221f846ee0 (LWP 22162)  0x0000003f3cacb2e6 in poll () from/lib64/libc.so.6

(gdb) t 1

[Switching to thread 1 (Thread0x2b221f846ee0 (LWP 22162))]#0 0x0000003f3cacb2e6 in poll () from /lib64/libc.so.6

(gdb) bt

#0 0x0000003f3cacb2e6 in poll () from /lib64/libc.so.6

#1 0x0000000000477c80 in accessor_run (pipefd=17) at accessor.c:209

#2 0x00000000004777c5 in accessor_main (pm=0x1d607050, pipefd=17) ataccessor.c:114

#3 0x00000000004a8d40 in core_server_module_startup (cs=0x7fff4ada5490,pchld=0x1d607730, sock=17) at dpl_core_server.c:82

#4 0x00000000004a8e21 in dpl_core_server_startup (cs=0x7fff4ada5490) atdpl_core_server.c:122

#5 0x00000000004a8e6c in dpl_core_server_run (cs=0x7fff4ada5490,timeout=-1) at dpl_core_server.c:140

#6 0x0000000000430380 in mp_run (mode=0) at mp_main.c:127

#7 0x00000000004302b6 in main (argc=1, argv=0x7fff4ada56b8) atmp_main.c:102

(gdb)f 1

 

Linux系统下跟踪子进程

有些程序启动后直接进入守护进程模式,此时若需要跟踪子进程的运行情况可以使用set follow-fork-mode child

[comm1@com182 bin]$ gdb cms-1.3.2

GNU gdb (GDB) Red Hat Enterprise Linux(7.0.1-32.el5)

Copyright (C) 2009 Free SoftwareFoundation, Inc.

License GPLv3+: GNU GPL version 3 or later<http://gnu.org/licenses/gpl.html>

This is free software: you are free tochange and redistribute it.

There is NO WARRANTY, to the extentpermitted by law.  Type "showcopying"

and "show warranty" for details.

This GDB was configured as"x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

Reading symbols from /home/comm1/com3.0/cms/cms-1.3/bin/cms-1.3.2...done.

(gdb) b read_cfg_and_init

Breakpoint 1 at 0x423094: file cms_init.c,line 100.

(gdb) setfollow-fork-mode child

(gdb) r

Starting program: /home/comm1/com3.0/cms/cms-1.3/bin/cms-1.3.2

warning: no loadable sections found inadded symbol-file system-supplied DSO at 0x2aaaaaaab000

[Thread debugging using libthread_dbenabled]

 

 _______________________________________________________

 |                                                      |

 |        NEU Common Message-processing System          |

 |                        (Ver 1.3)                      |

 |                                                      |

 |   Copyright (c) NEU CommTech Co., Ltd. 2005-2006     |

 |    AllRights Reserved.                              |

 |_______________________________________________________|

请等待...

系统运行 HOME 路径: [/home/comm1/com3.0/cms/com20_bd_1.3]

[New process 24540]

[Thread debugging using libthread_dbenabled]

[New process 24541]

系统转为后台运行, 进程号[24541].

[Thread debugging using libthread_dbenabled]

[Switching to Thread 0x2aaaac3edcb0 (LWP24541)]

Breakpoint 1, read_cfg_and_init () atcms_init.c:100

100             struct dirent   *dirp = NULL;

 

函数调用栈中errno覆盖问题

由于errno属于单线程内的静态变量,该变量应该以当前栈顶值f 0的设置为准,在其他栈中打印errno变量的值是无效的。

(gdb) bt

#0 0x0000003eff4cb2e6 in poll () from /lib64/libc.so.6

#1 0x00000000004b6d8a in dpl_milli_poll ()

#2 0x00000000004b25a3 in wait_for_io_or_timeout ()

#3 0x00000000004b2790 in dpl_socket_send ()

#4 0x00000000004ab3c2 in dpl_reactor_notify ()

#5 0x000000000047ed58 in handle_msg_module ()

#6 0x0000003effc0673d in start_thread () from /lib64/libpthread.so.0

#7 0x0000003eff4d40cd in clone () from /lib64/libc.so.6

(gdb) f 3

#3 0x00000000004b2790 in dpl_socket_send (socket=17, buf=0x427d409b  <incomplete sequence \321>,len=0x427d4090, timeout=-1)

   at dpl_socket.c:254

254             arv =wait_for_io_or_timeout(socket, 0, timeout);

(gdb) l

229    dpl_status_t   dpl_socket_send(dpl_socket_t socket, const char *buf, \

230                                     dpl_size_t*len, dpl_second_t timeout)

231    {

232             int rv=0;

233             dpl_status_t    arv;

234

235             do {

236                     errno = 0;

237                     rv = send(socket, buf,(*len), 0);

238             } while (rv == -1 && errno== EINTR);

239

240             if(rv > 0){

241                     (*len) = rv;

242                     return DPL_SUCCESS;

243             }

244             else if(!rv){

245                     (*len) = 0;

246                     return DPL_EOF;

247             }else{

248                     if(errno != EAGAIN){

249                             (*len) = 0;

250                             return errno;

251                     }

252             }

253

(gdb) p rv

$6 = -1

(gdb) p errno

$2 = 4

查看socket接收缓冲区当前缓存字节数

(gdb) p ioctl(4, 0x541B,&numbytes)

 $1 =0

 (gdb) p numbytes

 $2 =46

 (gdb) p ioctl(4, 0x541B,&numbytes)

 $3 =0

 (gdb) p numbytes

 $4 =57

 (gdb) p ioctl(4, 0x541B,&numbytes)

 $5 =0

 (gdb) p numbytes

 $6 =69

 (gdb) p ioctl(4, 0x541B,&numbytes)

 $7 =0

 (gdb)p numbytes

 $8 =120

 

 其中,

 4是需要读取的文件描述符,

 0x541B是固定参数,#defineFIONREAD        0x541B

 numbytes是当前上下文的临时变量。

 

4.3.  进程管理

对于处在阻塞状态或无法恢复状态的进程,可以采用暴力手段将其杀掉,前提是阻塞时不能占用共享锁。

由于子进程一般忽略TERM信号,所以采用kill pid的方式不起作用,需要用kill -9 pid

4.3. 

4.4. 

Solaris进程管理

pstop                停止进程

prun pid           重新启动进程

ptime pid         使用微状态计算进程时间

pwait pid         等待指定的进程终止

pcred pid           显示可信度

pfiles pid           显示已打开文件的

fstat和fcntl    信息

pflags pid          显示每个lwp的/proc跟踪标志,等待和持有信号量以及其他状态信息

pldd pid             显示链接到每个进程的动态链接库

pmap pid           显示地址映射空间

psig pid              显示信号操作

pstack pid         显示每个lwp的十六进制与符号堆跟踪

ptree pid           显示包含指定PID的进程树

pwdx oid          显示当前工作目录

 

Solaris查看进程打开描述符

bash-3.00$ pfiles 23926

23926: com

 Current rlimit: 256 file descriptors

   0:S_IFCHR mode:0666 dev:284,0 ino:6815752 uid:0 gid:3 rdev:13,2

     O_RDWR|O_LARGEFILE

     /devices/pseudo/mm@0:null

   1:S_IFCHR mode:0666 dev:284,0 ino:6815752 uid:0 gid:3 rdev:13,2

     O_RDWR|O_LARGEFILE

     /devices/pseudo/mm@0:null

   2:S_IFCHR mode:0666 dev:284,0 ino:6815752 uid:0 gid:3 rdev:13,2

     O_RDWR|O_LARGEFILE

     /devices/pseudo/mm@0:null

   3:S_IFREG mode:0644 dev:30,199 ino:1311017 uid:122 gid:1 size:5

     O_WRONLY|O_CREAT|O_LARGEFILE

     advisory write lock set by process 23890

     /export/home2/g-yang/com2.5.4/com/locks/com20.lock

   4:S_IFREG mode:0644 dev:30,199 ino:1212071 uid:122 gid:1 size:3551388

     O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE

     /export/home2/g-yang/com2.5.4/com/m-fifo/m-lost.log

   5:S_IFSOCK mode:0666 dev:291,0 ino:59033 uid:0 gid:0 size:0

     O_RDWR

       SOCK_STREAM

       SO_SNDBUF(16384),SO_RCVBUF(5120)

       sockname: AF_UNIX

   6:S_IFSOCK mode:0666 dev:291,0 ino:59178 uid:0 gid:0 size:0

     O_RDWR|O_NONBLOCK

       SOCK_STREAM

       SO_SNDBUF(16384),SO_RCVBUF(5120)

       sockname: AF_UNIX

   7:S_IFSOCK mode:0666 dev:291,0 ino:44609 uid:0 gid:0 size:0

     O_RDWR

       SOCK_STREAM

       SO_SNDBUF(49152),SO_RCVBUF(49152),IP_NEXTHOP(0.192.0.0)

       sockname: AF_INET 10.10.125.92 port: 33675

       peername: AF_INET 10.10.125.92 port: 7208

 

Solaris下查看端口占用进程

Linux系统下可以简单的用lsof -i:port,Solaris系统下如果没有安装lsof,可以安装下面命令获取。

-bash-3.00# cd /proc

-bash-3.00# for i in *

> do

> echo ------ process $i ---------

> pfiles $i | grep -i "port:28123"

> done

 

process 18325

       peername: AF_INET 10.87.172.62 port: 51242

process 24243

       peername: AF_INET 10.87.172.62 port: 50563

process 24244

       peername: AF_INET 10.87.172.62 port: 50565

process 24602

       peername: AF_INET 10.87.172.62 port: 50582

process 25506

       peername: AF_INET 10.87.172.62 port: 51312

process 2743

       peername: AF_INET 10.87.172.62 port: 32861

 

HN-M5-LT<comm5>:netstat -an|grep10.87.172.62

10.87.172.56.28123   10.87.172.62.32861   49640     0 49640     41 ESTABLISHED

10.87.172.56.28124   10.87.172.62.51242   49640     0 49640      0 ESTABLISHED

10.87.172.56.28123   10.87.172.62.51312   49640     0 49640     41 ESTABLISHED

10.87.172.56.28123   10.87.172.62.50563   49640     0 49640      0 ESTABLISHED

10.87.172.56.28123   10.87.172.62.50565   49640     0 49640      0 ESTABLISHED

10.87.172.56.28123   10.87.172.62.50582   49640     0 49640      0 CLOSE_WAIT

 

也可以通过IP查看

 pfiles $i | grep -i "peername: AF_INET10.87.172.62"

 

Linux进程管理

lsof语法格式是: lsof [options] filename

常用的参数列表:

lsof filename 显示打开指定文件的所有进程

lsof -a 表示两个参数都必须满足时才显示结果

lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件

lsof -u username 显示所属user进程打开的文件

lsof -g gid 显示归属gid的进程情况

lsof +d /DIR/ 显示目录下被进程打开的文件

lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长

lsof -d FD 显示指定文件描述符的进程

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

lsof -i 用以显示符合条件的进程情况

lsof -i[46][protocol][@hostname|hostaddr][:service|port]

46 -> IPv4 or IPv6

protocol -> TCP or UDP

hostname -> Internet host name

hostaddr -> IPv4地址

service -> /etc/service中的 servicename (可以不只一个)

port -> 端口号 (可以不只一个)

1) lsof test.txt 显示开启文件test.txt的进程

2) lsof -i :80 显示80端口现在运行什么程序

3) lsof -c httpd 显示httpd进程现在打开的文件

4) lsof -g gid 显示归属gid的进程情况

5) lsof +d /usr/local/ 显示/usr/local目录下被进程开启的文件

6) lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长

7) lsof -d 4 显示使用fd为4的进程

lsof -i [i] 用以显示符合条件的进程情况

语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

46 -> IPv4 or IPv6

protocol -> TCP or UDP

hostname -> Internet host name

hostaddr -> IPv4位置

service -> /etc/service中的 servicename (可以不只一个)

port -> 端口号 (可以不只一个)

例子: TCP:25 - TCP and port 25

@1.2.3.4 - Internet IPv4 host address1.2.3.4

tcp@ohaha.ks.edu.tw:ftp - TCP protocolhost:ohaha.ks.edu.tw service name:ftp

9) lsof -n 不将IP转换为hostname,缺省是不加上-n参数

例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n

10) lsof -p 12 看进程号为12的进程打开了哪些文件

11) lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新

-r,lsof会永远不断的执行,直到收到中断信号

+r,lsof会一直执行,直到没有档案被显示

例子:不断查看目前ftp连接的情况:lsof -i tcp@ohaha.ks.edu.tw:ftp -r

12) lsof -s 列出打开文件的大小,如果没有大小,则留下空白

 

附对lsof –p pid出来的字段说明:

COMMAND    PID    USER   FD     TYPE             DEVICE       SIZE       NODE NAME

httpd     4523   vmail  mem      REG                8,6     143336    737809 /usr/lib64/libexpat.so.0.5.0

httpd     4523   vmail  mem      REG                8,6     181832   1092244 /usr/lib64/libapr-0.so.0.9.4

httpd     4523   vmail  mem      REG                8,6      56885   3457249 /lib64/tls/librt-2.3.4.so

每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:

COMMAND:进程的名称

PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等

TYPE:文件类型,如DIR、REG等

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

 

[comm1@com182 bin]$ lsof -p 24697

COMMAND  PID    USER   FD  TYPE             DEVICE     SIZE    NODE NAME

com   24697 comm1    0u   CHR                1,3              1331 /dev/null

com   24697 comm1    1u   CHR                1,3              1331 /dev/null

com   24697 comm1    2u   CHR                1,3              1331 /dev/null

com   24697 comm1    3w   REG                3,2        5 22947998 /home/comm1/com3.0/com/lock/com20.lock

com   24697 comm1    4w   REG                3,2   158448 22915225 /home/comm1/com3.0/com/fifo/com_main.fifo

com   24697 comm1    5w   REG                3,2        5 22947998 /home/comm1/com3.0/com/lock/com20.lock

com   24697 comm1    6w   REG                3,2      441 22915390 /home/comm1/com3.0/com/fifo/com_smg_recv.fifo

com   24697 comm1    7u  IPv4             295082               TCP *:rasadv (LISTEN)

com   24697 comm1   24u  unix 0xffff810024320700            295031 socket

 

5.  系统参数调整

1.   

2.   

3.   

4.   

5.   

5.1.  Solaris系统调整参数

在project文件中添加该主机所有帐户的限制信息

$vi etc/project

添加如下信息(每个模块添加一条记录):(里面的红色色部分需要修改,com1修改为实际的帐户名,1000表示ID,必须在该文件中唯一,需要修改为一个与其他行不同的值)

user.com1:1000::::project.max-shm-memory=(privileged,85899345920,deny)

 

系统V共享内存是已知的Unix /Linux系统中最快的进程间通信方式,那么要想采用SHM方式申请共享内存需要做哪些操作呢?

在Solaris9中,需要在/etc/system中设置如下参数:

setnoexec_user_stack=1

setsemsys:seminfo_semmni=100

setsemsys:seminfo_semmns=1024

setsemsys:seminfo_semmsl=256

setsemsys:seminfo_semvmx=32767

setshmsys:shminfo_shmmax=4294967295

setshmsys:shminfo_shmmni=100

 

在Solaris10中,部分设置已无效:

其中,

shmsys:shminfo_shmmax                 共享内存段(shared memorysegment)最大值

shmsys:shminfo_shmmin                  共享内存段(shared memorysegment)最小值

shmsys:shminfo_shmmni                  共享内存标志符(shared memoryidentifiers)的数量,系统中共享内存段的最大个数。

semsys:seminfo_semmni                  系统中semaphoreidentifierer的最大个数。

semsys:seminfo_semmsl                  一个set中semaphore的最大个数。设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。

shmsys:shminfo_shmseg                  每个用户进程可以使用的最多的共享内存段的数目。

semsys:seminfo_semopm                每个semop调用的大操作数

 

project.max-shm-memory是属于同一个project的用户所能够创建的共享内存总和最大值,

 

修改操作系统参数

bl480g1<g-yang>:su – root

口令:

#vi /etc/system

添加

set shmsys:shminfo_shmmax= 8589934592

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=300

set shmsys:shminfo_shmseg=120

set semsys:seminfo_semmni=3320

set semsys:seminfo_semmsl=256

set semsys:seminfo_semmns=6640

set semsys:seminfo_semopm=100

set semsys:seminfo_semvmx=32767

set noexec_user_stack=1

set noexec_user_stack_log=1

 

修改用户project参数

bl480g1<g-yang>:su – root

口令:

#projadd -U g-yang user.g-yang

#projmod -a -K"project.max-shm-memory=(priv,4g,deny)" user.g-yang

 

验证参数

/export/home/g-yang>prctl -n project.max-shm-memory $$

process: 22448: -csh

NAME   PRIVILEGE       VALUE    FLAG  ACTION                      RECIPIENT

project.max-shm-memory

       privileged       4.0GB      -  deny                                -

       system          16.0EB    max  deny  

 

结论

在2台x86主机中测试后得出结论:

1.      shmsys:shminfo_shmmax配置均未生效,即单个共享内存段最大为2G-pagesize;

2.      project.max-shm-memory配置默认值为1/4物理内存;设置大于此值后立即生效。

 

 

5.2.  Linux系统调整参数

修改系统核心参数

修改/etc/sysctl.conf文件,增加下面行到这个文件最后,系统重起后生效,或者使用/sbin/sysctl –p生效。

kernel.sem = 250        32000  100     128

net.core.rmem_default=262144

net.core.rmem_max=262144

net.core.wmem_default=262144

net.core.wmem_max=262144

kernel.core_uses_pid = 0

net.ipv4.tcp_wmem = 4096 65536 4194304

【说明】

sem: 表示设置的信号量,有4个值(semmsl,semmns,semopm,semmni)。

net.core.rmem_default:缺省接收buffer大小。

net.core.rmem_max:接收buffer最大值。

net.core.wmem_default:缺省发送buffer大小。

net.core.wmem_max:发送buffer最大值。

kernel.core_uses_pid:产生的core文件名是否加进程id后缀。

可以使用/sbin/sysctl –a|grep shmmni来检查重新启动后的参数符合要求。

 

修改用户限制

/etc/security/limits.conf

#允许用户打开文件最大数

* - nofile 65535

#允许用户创建进程最大数

* - nproc 65535

 

pam中加入配置使生效

/etc/pam.d/login增加一行配置:

session   required     pam_limits.so

 

关闭防火墙

通过setup图形界面配置,关闭防火墙。

 

关闭SELinux

修改配置文件/etc/sysconfig/selinux ,将SELINUX设定为disable, 重启机器使之生效。

 

检查IP配置

默认是主机名对应127.0.0.1地址,需要加上一条网卡IP地址和主机名对应关系

127.0.0.1       apptest localhost.localdomainlocalhost    把这里的主机名删除

::1             localhost6.localdomain6 localhost6

10.10.10.10        apptest

 

1.   

2.   

3.   

4.   

5.   

5.1.   

5.3.  快速回收TIME_WAIT状态socket

为了使网关能够快速回收TIME_WAIT状态的socket,避免短连接频繁断连导致达到系统最大文件描述符大小,可以进行如下修改:

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_max_tw_buckets = 1000

 

以下为WEB服务器常用参数修改方法

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 1024    65000

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_max_tw_buckets = 5000

  说明:

  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;

  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭。

  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

  net.ipv4.ip_local_port_range = 1024    65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

  net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

  执行以下命令使配置生效:

/sbin/sysctl -p

 

 

5.4.  限制core.pid文件生成大小

RELH5.6版本系统配置core文件不带pid功能kernel.core_uses_pid=0对单线程有效,对多线程失效。

限制core文件大小方法:

在.bashrc文件中增加ulimit -c 0

 

5.5.  FTP工具一定选择vsftp

Linux自带的gssftp与其他系统通讯时容易出问题,需要在安装操作系统时指定安装vsftp

运行ntsysv命令,把vsftpd服务选中

运行/etc/init.d/vsftpd start启动服务

 

5.6.  Solaris系统性能监控工具

CPU

mpstat是solaris系统自带的实时监控工具,可以查看每个CPU处理器的统计信息。mpstat命令以表格形式报告每个处理器的统计信息,表格中的每一行代表一个处理的活动情况。mpstat可以确定每一个CPU都在花时间做什么:比如,分配给体系、用户、等待、空闲时间、体系调用、锁竞争、中断、错误、交织调用。

t2000-2<g-yang>:mpstat

CPU minf mjf  xcal intr  ithr  csw  icsw migr  smtx  srwsyscl  usr  sys  wt  idl

 0   10   0 873   320  200 188    0   31  33    1   155   1   2   0  97

 1    3   0  39   128    0 213    0   44  19    1   155   3   1   0  97

 

内存

vmstat 命令详解 

procs:进程相关

r                 在运行队列中等待的进程数

b                在等待io的进程数

w               可以进入运行队列但被替换的进程

memoy:内存相关

swap         现时可用的交换内存(k表示)

free           空闲的内存(k表示)

pages:内存页面相关

re               回收的页面

mf              非严重错误的页面

pi               进入页面数(k表示)

po              出页面数(k表示)

fr                空余的页面数(k表示)

de              提前读入的页面中的未命中数

sr               通过时钟算法扫描的页面

disk:显示每秒的磁盘操作

s表示scsi盘,0表示盘号

fault :显示每秒的中断数

in               设备中断

sy               系统中断

cy               cpu交换

cpu:表示cpu的使用状态

cs               用户进程使用的时间

sy               系统进程使用的时间

id               cpu空闲的时间

t2000-2<g-yang>:vmstat

 kthr     memory            page            disk          faults      cpu

 r bw   swap free  re  mf pi po fr de sr s0 s1 s2 --   in  sy   cs us sy id

 0 01 13169312 1940888 12 48 9 6  7  0 1  1 33 -0  0 1363 1617 2223  1  0 98

 

磁盘IO

t2000-2<g-yang>:iostat

  tty        sd0           sd1           sd2           nfs1           cpu

 tintout kps tps serv  kps tps serv  kps tps serv kps tps serv   us sy wt id

  0  273  12  1   26  614  33 395   0   0    6   0   0    0   1  0  0 98

 

总体

t2000-2<g-yang>:top

top: no termap entry for a `xterm-color'terminal

load averages:  0.54, 0.59,  0.60;                    up 57+13:59:18  15:31:59

284 processes: 283 sleeping, 1 on cpu

CPU states: 97.8% idle,  1.2% user, 0.9% kernel,  0.0% iowait, 0.0% swap

Memory: 8184M phys mem, 1014M free mem, 16G totalswap, 10G free swap

 

  PID USERNAME LWP PRI NICE SIZE   RES STATE    TIME   CPU COMMAND

 19817 tags2   200  53    2 667M  484M sleep   25:34 0.86% java

 1791 g-yang     1  44    03712K 2720K cpu/9    0:00  0.34% top

 

5.7.  Linux系统性能监控工具

总体

top

top - 15:49:30 up 18 days,  2:07, 1 user,  load average: 0.00, 0.00,0.00

Tasks: 148 total,   1 running, 147 sleeping,   0 stopped,  0 zombie

Cpu(s): 0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa, 0.0%hi,  0.0%si,  0.0%st

Mem:  2003096k total,  1975052kused,    28044k free,   397264k buffers

Swap: 4192956k total,        0kused,  4192956k free,  1297732k cached

 

  PIDUSER      PR  NI VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND                                                        

 5374comm1   15   0 12768 1136 824 R  0.3  0.1  0:00.02 top                                                            

    1root      15   0 10372 692  584 S  0.0  0.0  0:00.58 init  

 

内存

[comm1@com182 ~]$ free -m

              total       used       free    shared    buffers     cached

Mem:          1956       1928         27          0        387       1267

-/+ buffers/cache:               272      1683

Swap:        4094          0       4094

注:剩余内存为free+buffers+cache,swap空间还未用

6.  数据库类

4.   

5.   

6.   

6.1.  查询这2个表空间包含的表

select tablespace_name,table_name fromuser_tables

where tablespace_name in ('COM_CDR_IDX_TS','COM_CDR_TS ');

结果为空

 

6.2.  查询这2个表空间包含的分区表

select table_name||'       '||partition_name||'                 '||tablespace_name

from user_tab_partitions

where tablespace_name='COM_CDR_TS'

order by partition_name;

结果形如:

COM_CDR_MO_T   MO20100910              COM_CDR_TS

COM_CDR_MO_T   MO20100911              COM_CDR_TS

COM_CDR_MO_T   MO20100912              COM_CDR_TS

 

6.3.  查询分区表数量

select distinct table_name

from user_tab_partitions wheretablespace_name='COM_CDR_TS';

共5个分区表

COM_CDR_MO_T

COM_CDR_MTSR_T

COM_CDR_MOSR_T

COM_CDR_MT_T

COM_CDR_SENDF_MTSR_T

 

6.4.  查询分区表大小

select segment_Name,sum(bytes)/1024/1024

from user_extents where tablespace_name='COM_CDR_TS'

group by segment_name ;

SEGMENT_NAME                   SUM(BYTES)/1024/1024

--------------------------------------------------

COM_CDR_MO_T                                 27490

COM_CDR_MT_T                                 27948

COM_CDR_MTSR_T                                 222

COM_CDR_MOSR_T                                 222

COM_CDR_SENDF_MTSR_T                           222

可见COM_CDR_MO_T、COM_CDR_MT_T较大

 

6.5.  查询每个分区大小

select sum(bytes)/1024/1024,partition_name

from user_extents where segment_name='COM_CDR_MT_T'

group by partition_name;

结果形如:

SUM(BYTES)/1024/1024 PARTITION_NAME

--------------------------------------------------

                 278 MT20101129

                 248 MT20101218

                 246 MT20100912

                 322 MT20100917

                 298 MT20100929

可知每个分区大小约200~300m

 

6.6.  查询最大、最小分区

selectmin(partition_name),max(partition_name)

from user_tab_partitions where table_name =upper('COM_CDR_MO_T')

order by partition_name desc;

 

MIN(PARTITION_NAME)                                         MAX(PARTITION_NAME)

------------------------------------------------------------

MO20100910                                                  MO20101229

可见,mo大表中保存了3个月分区数据,mt大表查询方法相同

 

6.7.  查询这两个表空间的分区索引(导入分区后,索引会自动创建)

select index_name||'      '||partition_name||'       '||tablespace_name

from user_ind_partitions

where tablespace_name='COM_CDR_IDX_TS'

order by partition_name;

结果形如:

COM_MTSR_ARRIVE_TM_IDX MTSR20101216    COM_CDR_IDX_TS

COM_MTSR_ARRIVE_TM_IDX MTSR20101217    COM_CDR_IDX_TS

COM_MTSR_ARRIVE_TM_IDX MTSR20101218    COM_CDR_IDX_TS

 

6.8.  查询业务

select count(*),m_state,err_code,r_resultfrom com_cdr_mo_t where state_tm>=20120122000000 andstate_tm<20120123000000 group by m_state,err_code,r_result;

                     

 COUNT(*)    M_STATE   ERR_CODE  R_RESULT

---------- ---------- ---------- ----------

 59210069          0          0          0

    27812          0          1          0

    33784          0          3         0

  5750758          0          4          0

      693          0          6          0

     6133          0          8          0

        8          4          0          0

   943315          6          0          0

    40184          6          0      1009

    24406          6          0       1010

     2048          6          0       1076

 

6.9.  后台启动查询脚本

LN-SY-HTSMG-APP3<comms>10:db.sh &

[1] 24220

LN-SY-HTSMG-APP3<comms>11:cat db.sh

#!/bin/sh

sqlplus -S com20/2yhlfsl@com20 <<EOF>mo20090512

set head off feedback off verify off

set wrap off

set heading off

set newpage none

set linesize 175

select count(*),substr(state_tm,1,8) from com_cdr_mo_twhere m_state=0 and err_code=0 and target_gw=137111   and state_tm >=20090301000000 and state_tm<20090501000000 group by substr(state_tm,1,8);

exit

EOF

 

7.  其他

7.   

7.1.  grep精确查找

grep '\<data_init\>' */*/*.c

 

7.2.  查看二进制文件内容

xxd file

od -c file

注:不要用vi/vim编辑二进制或文本文件,保存后会在文件后加入一个字节0x0a

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值