java后端系统架构之技术架构验证篇2

时间:2022-04-30 21:12:25

本篇继续上篇内容

iostat

rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxbyt/s:每秒钟接收的字节数
txbyt/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包


jstatd 远程调试

jstatd -J-Djava.security.policy=pstat.policy -J-Djava.rmi.server.logCalls=true 

more pstat.policy
grant codebase "file:/home/csb/jdk1.7.0_25/lib/tools.jar" {  
   permission java.security.AllPermission;  
};

查文件句柄


 lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

查线程树

pstack pid

其它命令

vmstat
pidstat -d -t -p 7890
sar -n ALL 1 2
sar -n DEV 2 10

netstat -nat |awk '{print $6}'|sort|uniq -c              --查总共打开的tcp连接
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
netstat -s
netstat -nat |awk '{print $6}'


top命令

top - 20:31:44 up 106 days, 17:18,  2 users,  load average: 0.18, 0.22, 0.22
Tasks: 142 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.1%sy,  0.0%ni, 99.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8199588k total,  7890008k used,   309580k free,   564108k buffers
Swap: 16777212k total,       28k used, 16777184k free,  5380216k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                             
 5100 root      20   0  153m 8136 4176 S  0.3  0.1  19:50.44 snmpd                                                
    1 root      20   0 10416  696  584 S  0.0  0.0   1:30.83 init        

sy:系统调用,如果高,针对Java应用,一般表现为线程切换的多。
wa :io 等待时间
us :cpu时间

linux分析jvm cpu占用高问题

查Jvm进程各线程cpu占用情况

top -Hp 26126 -d 1 -n 1 
ps mp 56014-o THREAD,tid 

将耗cpu的pid转换为16进制

printf "%x\n" pid       pid转换为16进制

查找  nid值对应的线程

jstack -l pid  |grep Ox111

time-wait解决

netstat -ae|grep mysql


vi /etc/sysctl.conf


编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 655360
net.core.rmem_default = 262144
net.core.rmem_max = 3492800
net.core.wmem_default = 262144
net.core.wmem_max = 3492800
net.ipv4.tcp_max_tw_buckets = 5000
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_wmem = 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
net.ipv4.tcp_mem = 786432 1048576 1572864
 
然后执行 /sbin/sysctl -p 让参数生效。



net.ipv4.tcp_mem

内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看:

  #getconf PAGESIZE

  4096

  net.ipv4.tcp_mem = 196608       262144  393216

  第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预

  第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式

  第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory

  以上数值适用于4GB内存机器,对于8GB内存机器,建议用以下参数:

  net.ipv4.tcp_mem = 524288     699050  1048576  (TCP连接最多约使用4GB内存)

 

net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem

为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte

  net.ipv4.tcp_rmem = 4096        8192    4194304

  net.ipv4.tcp_wmem = 4096        8192    4194304

  第一个数字表示,为TCP连接分配的最小内存

  第二个数字表示,为TCP连接分配的缺省内存

  第三个数字表示,为TCP连接分配的最大内存

  一般按照缺省值分配,上面的例子就是读写均为8KB,共16KB

  1.6GB TCP内存能容纳的连接数,约为  1600MB/16KB = 100K = 10万

  4.0GB TCP内存能容纳的连接数,约为  4000MB/16KB = 250K = 25万

net.ipv4.tcp_max_orphans

最大孤儿套接字(orphan sockets)数,单位是个

net.ipv4.tcp_max_orphans = 65536

表示最多65536个

注意:当cat /proc/net/sockstat看到的orphans数量达到net.ipv4.tcp_max_orphans的约一半时,就会报:Out of socket memory



linux网络传输速度测试方法


iperf [-h|--help] [-v|--version]
tar zxvf iperf-2.0.5.tar.gz
./configure --prefix=/home/csb

A端主机
iperf -c 192.168.161.129 -i 1 -w 1M
B端主机
iperf -s -i 1 -w 1M

linux jvm监控与分析


java后端系统架构之技术架构验证篇2

上图看到jvm占用60%以上cpu,堆内存使用超过1G。

分析内存

1.使用  jmap -histo [pid] >test.dump
2.使用ibm ha.jar打开dump.

分析cpu

1.使用visuamM 采集cpu快照
2.分析出占cpu的方法

java后端系统架构之技术架构验证篇2

垃圾回收分析

jstat  -gcutil [pid] 2500 70
S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010
  0.00  55.61  75.70   0.02      ?      1    0.010     0    0.000    0.010

s0: 幸存代0 
s1:幸存代1
E:eden代
O:老生代
YGC:新生代gc次数
ygct :新生代gc花的时间
FGC:full全gc时间
FGCT :全gc时间
 GCT:总gc时间

google-perftools 

对 CPU  时间片、内存等系统资源的分配和使用进行分析。没有做过研究
java后端系统架构之技术架构验证篇2