java linux virt_Linux系统Java程序性能调优

最近在做一个linux平台的项目,第一次接触到性能调优,下面将此过程中的心得和大家分享一下:

测试环境:Linux Suse  4核处理器  单核内存2g   100万数据量的压力下测300个并发  设集合点

数据库:MySql 5.1

1、数据库:

(1)如果查询语句比较多,需要建索引,有必要时要建外键,但是外键影响插入数据的速度,视情况而定;

(2)优化sql语句,查询语句不要用select *,而是只select所需字段;

2、java代码需检查以下项

(1)文件I/O:文件使用后需要close,尽量减少文件读写次数;

(2)字符串拼接:使用StringBuffer构建字符串对象,使用StringBuffer类的append()方法代替使用“+”来拼接字符串;

(3)数组拷贝:使用System.arraycopy()方法代替for循环等循环拷贝的方式;

(4)全局变量:尽量不用session和map做全局变量,java回收局部变量的内存,不回收全局变量的内存;

(5)时间打印:可以在可能执行慢的代码前后加时间打印,分析原因。

//获取精确到毫秒的时间

public static String getMilTime()

{

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");

String time = sdf.format(date);

return time;

}

3、jni调用

(1)在将java string转换为native string之后,要调用ReleaseStringUTFChars释放。

if (MNull != pszPath && MNull != strJString)

{

env->ReleaseStringUTFChars(strJString, pszPath);

}

(2)用完java传递过来的obj之后,调用(env)->DeleteLocalRef(obj);释放

4、内存监测

(1)tomat——bin——catalina.sh里配置(以4核单核2g共8g内存为例)

export JAVA_OPTS="-Xmx4000M -Xms4000M -Xmn1500M -XX:PermSize=500M -XX:MaxPermSize=500M -Xss256K -XX:+DisableExplicitGC

-XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection

-XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods

-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log"

内存回收时在catalina.out的日志里会有打印

{Heap before GC invocations=3 (full 0):

par new generation   total 1344000K, used 1344000K [0x00000006e6c00000, 0x0000000744800000, 0x0000000744800000)

eden space 1152000K, 100% used [0x00000006e6c00000, 0x000000072d100000, 0x000000072d100000)

from space 192000K, 100% used [0x0000000738c80000, 0x0000000744800000, 0x0000000744800000)

to   space 192000K,   0% used [0x000000072d100000, 0x000000072d100000, 0x0000000738c80000)

concurrent mark-sweep generation total 2560000K, used 58068K [0x0000000744800000, 0x00000007e0c00000, 0x00000007e0c00000)

concurrent-mark-sweep perm gen total 512000K, used 37864K [0x00000007e0c00000, 0x0000000800000000, 0x0000000800000000)

172.036: [GC 172.036: [ParNew: 1344000K->192000K(1344000K), 1.3336070 secs] 1402068K->318266K(3904000K), 1.3337350 secs] [Times: user=1.32 sys=0.04, real=1.34 secs]

Heap after GC invocations=4 (full 0):

par new generation   total 1344000K, used 192000K [0x00000006e6c00000, 0x0000000744800000, 0x0000000744800000)

eden space 1152000K,   0% used [0x00000006e6c00000, 0x00000006e6c00000, 0x000000072d100000)

from space 192000K, 100% used [0x000000072d100000, 0x0000000738c80000, 0x0000000738c80000)

to   space 192000K,   0% used [0x0000000738c80000, 0x0000000738c80000, 0x0000000744800000)

concurrent mark-sweep generation total 2560000K, used 126266K [0x0000000744800000, 0x00000007e0c00000, 0x00000007e0c00000)

concurrent-mark-sweep perm gen total 512000K, used 37864K [0x00000007e0c00000, 0x0000000800000000, 0x0000000800000000)

}

内存回收后的used内存数量是当前程序占用的内存总数;

(2)linux下用top命令可以看内存mem和cpu的占用率,此时的数据是4核的

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

21082 root      20   0 69616 7236 4652 S     30  0.1   0:42.64 PPS

3315 root      20   0  181m  33m 7908 S     12  0.6 106:34.25 X

16632 root      20   0  341m  34m  20m S     12  0.6 151:18.11 gnome-system-mo

21038 root      20   0 4914m 2.0g  12m S     10 34.4   1:34.54 java

想看单核的用“shift+h”即可

(3)Load Runner指标:平均请求时间、最大时间、最小时间、90%请求时间(通常作为判断依据,相当于100个用户,有90个用户是在那个标准之下) Transaction Name      Minimum    Average    Maximum    Std.Deviation    90 Percent    Pass    Fail    Stop Action_Transaction     0.134      2.756      19.655        0.804          2.842      195,000   0      127 vuser_end_Transaction    0         0         0.002           0              0           300    0       0 vuser_init_Transaction   0         0           0             0               0          300    0       0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值