# ./asadmin enable-secure-admin
Enter admin user name> admin
Enter admin password for user "admin">
You must restart all running servers for the change in secure admin to take effect.
Command enable-secure-admin executed successfully.
# ./asadmin stop-domain
# ./asadmin start-domain
8、修改http端口:
进入DAS,Configurations->server-config->HTTP Service->Http Listeners,选择需要修改端口的listener,修改成想要的端口即可。
二、调优部分
1、GlassFish Server调优
a、部署部分
关闭自动部署。虽然在开发环境非常便利,但是在生产环境关闭自动部署能够优化性能。
使用预编译的JSP
编译jsp文件会消耗系统资源,通过配置预编译,能够提升第一次访问jsp的速度。可以在部署应用程序时勾选预编译选项。
关闭应用动态重载
如果能够动态重载,服务器会定期检查应用程序的改变并且重载改变的部分。这个特性在开发环境很便利,但是与会话持久性不兼容,对于生成环境,建议关闭动态类重载。
b、日志配置
写日志对性能有轻微的影响,日志的轮循大小、轮循次数,提高日志的级别都会对性能产生影响。可以修改日志的级别为WARNING减少对日志文件的磁盘写入,提升服务器性能。
c、web容器设置
会话超时:缺省是30分钟,可以根据应用的实际情况修改。如何设置过大,系统维护的session数量较多,会影响性能。
收获间隔:修改收获间隔会影响性能,但是设置过大,有可能会发生会话持久性不一致的情况。
禁用jsp动态重载:产品系统通过禁止jsp动态重载提升性能,对每一个实例,修改default-web.xml配置文件为:
d、EJB容器调优
略
e、JMS配置
略
f、事务服务配置
事务管理器使得分布式事务的提交与回滚成为可能。分布式事务系统通过写事务活动到事务日志,使得恢复成为可能,但写事务日志会带来一些性能开销。
禁用事务日志可以提升性能:(命令没执行,提示找不到属性)
# asadmin set server.transaction-service.disable-distributed-transaction-logging=true
g、HTTP服务设置
关闭监视统计的搜集能够提升性能。
监视HTTP服务:
DNS缓存信息,缺省禁用;文件缓存信息;keep-alive信息,与HTTP会话超时相关;连接队列信息;
访问日志信息,缺省禁用,当性能达到平衡,确保关闭访问日志。如果开启日志访问,推荐配置日志轮循,防止日志耗尽磁盘空间。
h、网络监听设置(Configurations->server-config->Network Config->Network Listeners->http-listener)
一般设置:将监听器的ip地址0.0.0.0设置为网卡ip地址,如果有多块网卡,为每一块网卡建立一个监听器。
HTTP设置:
最大连接数,缺省是250,根据应用客户端请求数调整该参数,可以设置一个较大的数(例如10000),可以允许客户端发送更多的请求。
DNS lookup,设置该参数,服务器会通过客户端ip地址反查客户端主机名,该参数会增加服务器延迟,配置该参数需要小心,缺省为不能。
Timeout,超时设置,该参数决定了服务器保留活动连接的最大时间,客户端通过单一的网络连接可以请求更多的服务内容。缺省为30秒,如果空闲时间超过30秒,服务器将关闭该连接。该参数最大可设置值为300秒(5分钟)。如果客户端请求频繁,可以调高该参数值,反之降低该参数值。服务器每秒钟可能接受几百个新的连接,如果每个请求都无限期的保留开放连接,服务器的连接很快就会超载,在unix/linux系统上,很容易导致文件表溢出。glassfish有一个keep-alive系统,它维持一个最大的keep-alive连接数,当服务器keep-alive连接数到达该值时,服务器关闭最旧的连接,以容纳新的keep-alive连接。如果http1.0的客户端(或者http1.1的客户端但是请求不频繁)很多,建议降低该值,减少开放连接的保留时间。
头缓存大小,缺省值能够满足绝大多数情况,可以根据请求的实际情况进行调整并观察对性能的影响。
文件缓存设置:
galssfish使用文件缓存提升访问静态内容的性能,文件缓存包含的静态文件例如HTML、CSS、图片文件以及文本文件等。开启文件缓存能够显著地影响性能。
最大文件数,决定了能够缓存多少文件,如果设置过大,导致服务器会缓存很少使用到的文件,造成内存浪费,如果设置过小,会丧失缓存的优势。尝试不同的值找到特定应用的最优解决方案。
最大生命周期,该值决定了缓存文件最长过期时间,超过该值,缓存的文件条目将会被相同文件新的条目替代。如何web站点的内容变化不频繁,增加该值以提升性能。
i、传输设置(Configurations>server-config>Network Config>Transports>tcp)
接收器线程接受http连接,并且将他们置于连接队列中。会话线程从连接队列中分拣连接并且处理请求。设置接收器线程属性小于或等于服务器cpu的数量。
j、线程池设置(Configurations>configuration-name>Thread Pools>thread-pool-name)
最大线程池的大小:最大线程池的大小决定了服务器能够同时处理请求的数量,缺省为5,当到达这个限制,新的请求将会推迟处理,直到活动的请求连接数降到最大值以下。提升这个值会减少HTTP服务响应延迟时间。调整线程的数量基于系统负载与每次请求处理的平均时长。合适的最大线程池的值范围在100到500,根据系统负载调节。
最小线程池的大小:服务器初始启动时拥有的最小线程池的数量,缺省为2。将最大线程池和最小线程池指定为同样的大小,会允许服务器运行更优化的线程池。除非使得服务器的负载发送明显的变化,才需要考虑调整该参数。
k、 ORB设置
略
l、资源设置
调整jdbc和连接器资源的配置能够显著提升glassfish服务器的性能。
JDBC连接池设置:
连接池的大小设置,设置过小的连接池,可以能快的访问连接表,但是可能没有足够的连接满足请求,请求在队列中可能花费更多的时间;设置过大的连接池,会降低访问连接表的速度。可以根据访问数据库的实际情况调整参数。
Initial and Mimimum Pool Size,连接池建立时的大小以及最小允许的大小。
Maximum Pool Size,连接池大小的上限。
Pool Resize Quantity,为数据库连接池在连接空闲超时,调整池的大小时一次性删除或者申请的数量。
超时设置,Max Wait Time,调用者获得连接所需要等待的最大时间,缺省为60秒,如果设置为0,则强迫调用者无限期等待。设置最大等待时间为0,可以提升系统性能,这样会堵塞调用者线程直到连接可用,同样会消除服务器跟踪每个请求等待时间的开销,提升性能。Idle Timeout,池中连接能够保留的最大空闲时间,过了这个时间,连接池将关闭该连接,该属性与数据库连接超时控制无关,一般设置这个参数小于数据库连接超时时间,以减少glassfish服务器不可用连接的积累,设置该参数为0,会获得最佳性能,它会消减建立新连接的开销以及不可用空闲监视线程,但是这样做会导致无效连接的风险增加。
隔离级别设置,Transaction Isolation,指定连接池连接的隔离级别,如果没有指定,则采用jdbc驱动的缺省事务隔离级别。Isolation Level Guaranteed,保证连接池中获取的连接为事务隔离中指定的事务隔离级别,只有指定了事务隔离级别,这个参数才是有用的,这个设置在一些jdbc驱动会产生一些性能影响,如果应用程序在返回连接时不改变隔离级别,可以设置该参数为false。尽量不要指定事务的隔离级别,如果不可能,可以考虑禁用Isolation Level Guaranteed选项,并且保证不通过编程的方式改变连接的隔离级别。
连接校验设置,是连接池提供连接前对连接进行校验的设置。Connection Validation Required,如果设置为enabled,则对连接进行校验,如果数据库的连接可靠,尽量设置该参数为disabled。Validation Method,校验方法,包括自动提交、元数据、表以及定制校验等方法。Table Name,表名,是表校验时采用的表名。Close All Connections On Any Failure,指明当单个连接校验失败时是否关闭连接池中的所有连接,缺省为Disabled,只尝试重建失败的连接。
连接器连接池设置:
略
m、负载均衡设置
略
2、Java运行系统(JVM)调优
a、java虚拟机设置(Configurations>configuration-name>JVM Settings)
HotSpot提供了两种jvm实现:
开发环境采用-client选项,可以减少启动时间和保护内存资源使用。
企业环境采用-server选项,提供最大的程序运行速度。
b、开始选项
某些情形下,采用大的分页大小能够提升系统性能。在JVM Settings添加-XX:LargePageSizeInBytes=2m选项,如果JDK是在1.5 update5以前的,还需要手动加-XX:+UseLargePages选项,作用是启用大内存页。
c、调优高可用性持久化
略
d、管理内存及垃圾收集器
任何应用程序的效率都取决于多大程度可用的内存以及垃圾收集是如何管理的。
垃圾收集器调优:缺省的垃圾收集器是为最大吞吐量优化的,但是可能会造成较长的暂停时间。如果希望避免延迟开销,可以考虑使用CMS垃圾收集器。
配置CMS垃圾收集器:-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:SoftRefLRUPolicyMSPerMB=1
允许多线程收集新生代:-XX:+UseParNewGC
跟踪垃圾收集器:垃圾收集器两个主要的性能指标是吞吐量和暂停。如果以冗长模式启动glassfish服务器(asadmin start-domain --verbose domain),则会在每次垃圾收集时都会打印垃圾收集情况的一些信息。
打印更多的日志信息:-XX:+PrintGCDetails
在将日志保存到日志文件中:-Xloggc:file
其他的垃圾收集器设置:
设置永生代和最大永生代,可以设置两者一样大,以避免空间延展收缩影响性能:
-XX:PermSize=192m
-XX:MaxPermSize=192m
关闭显式垃圾收集:-XX:+DisableExplicitGC
设置完全垃圾收集频次,将缺省每分钟一次的收集频率修改为每小时一次:
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
调整java堆内存:
最大的堆空间总是小于每个处理器最大的寻址空间。windows xp/7/2008不能超过2G,32位的Linux不能超过4G,64位的系统处理器最大寻址空间是T级别的。最大寻址空间与分配给堆使用的总内存并不相同,可以通过增长内存的大小和采用不同的垃圾收集器来提升性能。
-Xms和-Xmx参数定义了最小初始和最大堆大小。为了防止堆增长或收缩,可以将堆的最小值和最大值设置为相等,这样堆的大小就变成了固定大小。
设置更大的年轻代,能够减少minor收集的发生,年轻代与老年代的关系由NewRatio参数控制,例如设置-XX:NewRatio=3表示
年轻代与老年代的比例是1:3,缺省的情况下,glassfish服务器调用HotSpot JAVA虚拟机,NewRatio的缺省值是2,更大的年轻代更合适于短生命周期对象,减少缓慢的major收集的需求。老年代依然足够大能够包容很多的长生命周期对象。
划分java堆大小的原则:
决定能够给予jvm总内存大小,因此需要根据年轻代的大小标示的性能度量,发现最好的设置。
划出足够多的内存提供给年轻代使用,缺省的计算来自于NewRatio和-Xmx设置。
更大的Edan和年轻代能够增加全垃圾收集的间隔,但是相应的增加了年轻代空间收集的时长。一般情况下,保持Edan的空间处于1/4到1/3的最大堆空间之间,老年代比年轻代拥有更大的空间。
幸存空间比例大小,SurvivorRatio参数控制两个幸存空间的大小,例如-XX:SurvivorRatio=6表示每个幸存空间与Edan空间的比例是1:6,每个幸存空间是年轻代空间的1/8大小。如果幸存空间太小,有可能会导致拷贝收集溢出,而直接将对象拷贝到老年代。如果幸存空间太大,它可能比较空。每次垃圾收集,在对象老化之前,JVM统计对象存活的次数,这叫做老化阀值。
3、操作系统及平台调优
这个部分通过调整操作系统优化性能。
a、服务器度量指标
处理器:glassfish主动使用服务器多处理器的好处。更多的处理器能够提升处理动态内容的性能,静态内容的提升更依赖于I/O处理能力。研究显示双倍的cpu数量能够提升servlet性能50%到80%。
内存
磁盘空间
网络
UDP缓存大小:在Linux平台上,缺省的UDP缓存大小是为客户端而不是为服务器端设置的。
在/etc/sysctl.conf文件中设置UDP缓存大小:
net.core.rmem_max=262143
net.core.wmem_max=262143
net.core.rmem_default=262143
net.core.wmem_default=262143
b、Linux平台调优
开始文件:
执行命令:
# cat /proc/sys/kernel/shmmax,如果显示的值大于等于67108864,则保留现在的值,
否则修改文件/etc/sysctl.conf,添加:kernel.shmmax = 67108864
文件描述符:
执行命令:# cat /proc/sys/fs/file-max
如果显示的值大于等于65535,则保留现在的值,否则修改文件/etc/sysctl.conf,添加:fs.file-max = 65535
检查并且修改每个shell的limits限制:
# ulimit -a
open files被限制为1024,修改/etc/security/limits.conf文件,添加:
* soft nofile 65535
* hard nofile 65535
修改/etc/pam.d/login文件,添加:
session required /lib/security/pam_limits.so(32位系统)
session required /lib64/security/pam_limits.so(64位系统)
虚拟内存:
主要是调整脏数据的刷新频率,linux内核版本2.4和2.6配置不同。/proc/sys/vm/dirty_expire_centisecs,该文件表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘,缺省设置:3000(1/100秒),可以观察系统运行情况,必要时可以调高该值以减少写磁盘次数。/proc/sys/vm/dirty_ratio,该文件表示如果进程产生的脏数据到达系统整体内存的百分比,此时进程自行把脏数据写回磁盘,缺省设置:40。/proc/sys/vm/dirty_background_ratio,该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘,缺省设置:10。 /proc/sys/vm/dirty_writeback_centisecs,该文件表示pdflush进程周期性间隔多久把脏数据写回磁盘,缺省设置:500(1/100秒)。
网卡:保证运行在全双工模式
磁盘I/O设置:
TCP/IP设置:
修改文件/etc/sysctl.conf,添加:
net.core.rmem_max=262143
net.core.wmem_max=262143
net.core.rmem_default=262143
net.core.wmem_default=262143
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 60000
net.ipv4.tcp_keepalive_intvl = 15000
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 0
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_rmem = 4096 131072 262143
net.ipv4.tcp_wmem = 4096 131072 262143