wsimport和xjc命令

-encoding utf-8 指定编码集

wsimport 生成Webservice客户端

1
wsimport -s D:\temp\s -p com.map -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

用法详见:wsimport -help

xjc 根据xsd生成Java Bean

用法详见: xjc -help

常用JVM参数

内存设置

参数 含义 说明
-Xms1024m 初始堆大小
-Xmx1024m 最大堆大小
-Xmn500m 年轻代大小
-Xss1024k 单个线程栈
-XX:PermSize=200m 永久代 before java8
-XX:MaxPermSize=300m 永久代 before java8
-XX:MetaspaceSize 元数据 after 8
-XX:MaxMetaspaceSize 元数据 after 8
-XX:NewRatio=4 Olden区与Young区比例 4:1
-XX:SurvivorRatio=8 Eden与Survivor区比例 8:1:1
-XX:LargePageSizeInBytes 内存页大小 JVM优化之调整大内存分页

GC设置

参数 含义 说明
-XX:+DisableExplicitGC 关闭System.gc() 慎用
-XX:MaxTenuringThreshold 晋升年龄
-XX:PretenureSizeThreshold=1024k Olden区直接分配对象临界值
-Xnoclassgc 禁用类回收
-XX:SoftRefLRUPolicyMSPerMB=1s 软引用存活秒数/每空闲MB
-XX:+UseParNewGC 并行回收YOUNG区,CMS默认搭档
-XX:+UseConcMarkSweepGC CMS回收老年代
-XX:CMSFullGCsBeforeCompaction=3 3次FullGC后,整理老年代
-XX:+CMSParallelRemarkEnabled 并行标记,降低停顿
-XX:CMSInitiatingOccupancyFraction=85 Olden区85%后开始GC
-XX:+CMSClassUnloadingEnabled 开启类卸载

调试参数

参数 含义 说明
-XX:+PrintGCDetails GC日志
-XX:+PrintGCApplicationStoppedTime GC停顿时间
-verbose:gc/class/jni 查看gc、类加载、本地方法调用
-XX:+PrintHeapAtGC 打印GC触发时的堆栈
-Xloggc:log/gc.log 输出gc log
-XX:+HeapDumpOnOutOfMemoryError 内存溢出时产生堆dump
-XX:+HeapDumpOnCtrlBreak Crtl+Break产生dump

其他

-Xverify:none 跳过编译检查
服务器推荐GC参数:
-Xloggc:gc.log
-XX:+PrintGCDetails
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime

读《深入理解Java虚拟机》2-JDK工具

JDK bin目录下提供了很多工具,大部分基于lib/tools.jar。
工具命令命名规则参考了unix系统的命令

  • jps [options] [hostid] 查询虚拟机进程状况
    • -q 只输出lvmid
    • -m 输出main函数的参数
    • -l 输出主类全名,或jar包路径
    • -v 输出进程启动的JVM参数
  • jstat [option vmid[interval[s|ms] [count]]] 监视进程状态,类加载、gc、编译等

9JlFu4.md.jpg
jstat -gcutil 2764
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

  • jinfo [option] vmid 查看配置信息

    • -sysprops查看System.getProperties()
    • -flag name 查询jvm参数
    • -flag name=value 设置jvm参数
  • jmap [option] vmid 生成堆dump等功能
    9YqUXj.md.png

  • jhat 堆dump分析工具

  • jstack [option] vmid 生成线程快照

    • -F 请求不响应时强制输出线程堆栈
    • -l 附加锁信息
    • -m 附加本地方法堆栈

    Thread.getAllStackTraces()查看线程堆栈

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
    for (Entry<Thread,StackTraceElement[]> entry :map.entrySet()){
    if (entry.getKey().equals(Thread.currentThread()))
    continue;
    System.out.println("线程:"+entry.getKey().getName());
    StackTraceElement[] traceElements = entry.getValue();
    for (int i = 0; i <traceElements.length ; i++) {
    System.out.println(traceElements[i].toString());
    }
    }

JDK可视化工具

  • JConsole 监控管理控制台,可视化jstate、jinfo、jstack等功能
  • JVisualVM 可集成各种插件的故障处理工具,常用插件:
    • BTrace动态日志跟踪
    • MBeans
    • VisualGC
    • JConsole Plugins

Linux服务器性能优化参数

防火墙

service iptables start
iptables -F

网络连接相关

sysctl -w netfilter.ip_conntrack_tcp_timeout_time_wait=10
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_close=10
netstat -n |grep 8846 | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ 端口使用状态统计

统一修改配置文件 /etc/sysctl.conf

加入以下内容:
net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。;
net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.ip_local_port_range = 1024 65000
修改端口范围,默认是32768 61000
net.ipv4.tcp_max_tw_buckets = 3000

当time_out达到多少以后,系统自动释放链接

执行 /sbin/sysctl -p 让参数生效

修改文件配置

/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait 值从原来的120改为10
这是tcp连接中断后系统等待的释放的时间, 否则在高并发下面产生大量的time_out,导致无法连接

  1. 查看网络TCP连接状态命令
    #netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”\t”,state[key]}’

  2. 查看Timeout配置命令
    #sysctl -a | grep time | grep wait

文件打开数设置
ulimit -n

  1. 修改/etc/security/limits.conf文件,在文件中添加如下行:
  • soft nofile 10240
  • hard nofile 10240
  1. 修改/etc/pam.d/login文件,在文件中添加如下行:
    session required /lib/security/pam_limits.so
  2. 查看Linux系统级的最大打开文件数限制,使用如下命令:
    cat /proc/sys/fs/file-max
    修改 : echo 22158 > /proc/sys/fs/file-max
  3. 修改用户打开数限制
    echo ulimit -HSn 65536 >> /etc/rc.local
    echo ulimit -HSn 65536 >>/root/.bash_profile
    ulimit -HSn 65536

数据库相关

alter database clear unarchived logfile group 7;

alter system set DB_RECOVERY_FILE_DEST_SIZE=20g;