`
diddyrock
  • 浏览: 46162 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

防止博主删除

阅读更多
转载自
http://sdh5724.iteye.com/blog/283977

<本文提供的设置仅仅是在高压力, 多CPU, 高内存环境下设置>

最近对JVM的参数重新看了下, 把应用的JVM参数调整了下。  几个重要的参数

-server -Xmx3g -Xms3g -XX:MaxPermSize=128m
-XX:NewRatio=1  eden/old 的比例
-XX:SurvivorRatio=8  s/e的比例
-XX:+UseParallelGC
-XX:ParallelGCThreads=8
-XX:+UseParallelOldGC  这个是JAVA 6出现的参数选项
-XX:LargePageSizeInBytes=128m 内存页的大小, 不可设置过大, 会影响Perm的大小。
-XX:+UseFastAccessorMethods 原始类型的快速优化
-XX:+DisableExplicitGC  关闭System.gc()



另外 -Xss 是线程栈的大小, 这个参数需要严格的测试, 一般小的应用, 如果栈不是很深, 应该是128k够用的, 不过,我们的应用调用深度比较大, 还需要做详细的测试。 这个选项对性能的影响比较大。 建议使用256K的大小.

例子:

-server -Xmx3g -Xms3g -Xmn=1g -XX:MaxPermSize=128m -Xss256k  -XX:MaxTenuringThreshold=10 -XX:+DisableExplicitGC -XX:+UseParallelGC -XX:+UseParallelOld GC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking 



-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 打印参数

=================================================================

另外对于大内存设置的要求:

Linux :
Large page support is included in 2.6 kernel. Some vendors have backported the code to their 2.4 based releases. To check if your system can support large page memory, try the following: 

# cat /proc/meminfo | grep Huge
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
#

If the output shows the three "Huge" variables then your system can support large page memory, but it needs to be configured. If the command doesn't print out anything, then large page support is not available. To configure the system to use large page memory, one must log in as root, then:

   1. Increase SHMMAX value. It must be larger than the Java heap size. On a system with 4 GB of physical RAM (or less) the following will make all the memory sharable:

      # echo 4294967295 > /proc/sys/kernel/shmmax

   2. Specify the number of large pages. In the following example 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048k, then 3g = 3 x 1024m = 3072m = 3072 * 1024k = 3145728k, and 3145728k / 2048k = 1536):

      # echo 1536 > /proc/sys/vm/nr_hugepages

Note the /proc values will reset after reboot so you may want to set them in an init script (e.g. rc.local or sysctl.conf).

=============================================
这个设置, 目前观察下来的结果是EDEN区域收集明显速度比较快, 最多几个ms, 但是,对于FGC, 大约需要0。9, 但是发生时间非常的长,应该是影响不大。 但是对于非web应用的中间件服务, 这个设置很要不得, 可能导致很严重延迟效果. 因此, CMS必然需要被使用, 下面是CMS的重要参数介绍

关于CMS的设置:

使用CMS的前提条件是你有比较的长生命对象, 比如有200M以上的OLD堆占用。 那么这个威力非常猛,可以极大的提高的FGC的收集能力。 如果你的OLD占用非常的少, 别用了, 绝对降低你性能, 因为CMS收集有2个STOP WORLD的行为。 OLD少的清情况, 根据我的测试, 使用并行收集参数会比较好。


-XX:+UseConcMarkSweepGC   使用CMS内存收集
-XX:+AggressiveHeap 特别说明下:(我感觉对于做java cache应用有帮助)

    * 试图是使用大量的物理内存
    * 长时间大内存使用的优化,能检查计算资源(内存, 处理器数量)
    * 至少需要256MB内存
    * 大量的CPU/内存, (在1.4.1在4CPU的机器上已经显示有提升)

-XX:+UseParNewGC 允许多线程收集新生代
-XX:+CMSParallelRemarkEnabled  降低标记停顿

-XX+UseCMSCompactAtFullCollection  在FULL GC的时候, 压缩内存, CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。




压力测试下合适结果:

-server -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:MaxTenuringThreshold=31 -XX:+DisableExplicitGC  -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods



由于Jdk1.5.09及之前的bug, 因此, CMS下的GC, 在这些版本的表现是十分糟糕的。  需要另外2个参数来控制cms的启动时间:

-XX:+UseCMSInitiatingOccupancyOnly   仅仅使用手动定义初始化定义开始CMS收集

-XX:CMSInitiatingOccupancyFraction=70  CMS堆上, 使用70%后开始CMS收集。



使用CMS的好处是用尽量少的新生代、,我的经验值是128M-256M, 然后老生代利用CMS并行收集, 这样能保证系统低延迟的吞吐效率。 实际上cms的收集停顿时间非常的短,2G的内存, 大约20-80ms的应用程序停顿时间。



=========系统情况介绍========================

这个例子是测试系统12小时运行后的情况:

$uname -a

2.4.21-51.EL3.customsmp #1 SMP Fri Jun 27 10:44:12 CST 2008 i686 i686 i386 GNU/Linux



$ free -m
             total       used       free     shared    buffers     cached
Mem:          3995       3910         85          0        162       1267
-/+ buffers/cache:       2479       1515
Swap:         2047          0       2047



$ jstat -gcutil 23959 1000

S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT 
59.06   0.00  45.77  44.45  56.88  15204  324.023    66    1.668  325.691
  0.00  39.66  27.53  44.73  56.88  15205  324.046    66    1.668  325.715
53.42   0.00  22.80  44.73  56.88  15206  324.073    66    1.668  325.741
  0.00  44.90  13.73  44.76  56.88  15207  324.094    66    1.668  325.762
51.70   0.00  19.03  44.76  56.88  15208  324.118    66    1.668  325.786
  0.00  61.62  19.44  44.98  56.88  15209  324.148    66    1.668  325.816
53.03   0.00  14.00  45.09  56.88  15210  324.172    66    1.668  325.840
53.03   0.00  87.87  45.09  56.88  15210  324.172    66    1.668  325.840
  0.00  50.49  72.00  45.22  56.88  15211  324.198    66    1.668  325.866



GC参数配置:

JAVA_OPTS=" -server -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:MaxTenuringThreshold=31 -XX:+DisableExplicitGC  -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "

实际上我们可以看到并行young gc执行时间是: 324.198s/15211=20ms, cms的执行时间是 1.668/66=25ms. 当然严格来说, 这么算是不对的, 世界停顿的时间要比这是数据稍微大5-10ms. 对我们来说如果不输出日志,对我们是有参考意义的。



32位系统下, 设置成2G, 非常危险, 除非你确定你的应用占用的native内存很少, 不然可能导致jvm直接crash。



-XX:+AggressiveOpts 加快编译

-XX:+UseBiasedLocking 锁机制的性能改善。


gembler 2009-01-10   回复
sdh5724 写道
我想你应该补充JAVA基础知识了。
在一个thread执行同步一个对象, 跟多个thread执行同步一个对象关系
比如, 在一线程里独立拥有的对象所有的操作都是同步的, 那么每次操作都要获得锁, 这个是没有意义的。---无竞争同步
      在多个线程里, 这个对象所有操作被不同线程加锁, 那么他有是有意义。

先谢谢。
你这样一解释,我对“uncontended synchronization”和“contended synchronization”开窍了。

主要被那两个专业术语搞混了。

因为在我的日常应用中,“在一个thread执行同步一个对象” - 这种情况我是完全避免掉
sdh5724 2009-01-10   回复
gembler 写道

sdh5724 写道public void methodA(){&nbsp; Vector v = new Vector();&nbsp; v.put(Object);&nbsp; v.get(i)}这个操作没有锁。 因为Vector本是同步的。 JVM现在能自动识别是否需要锁。刚才看了一下Vector的src你所说的put是说add不?发现Vector里尽是synchronized,如果说uncontended synchronization(无竞争的同步)是会出现synchronized,那么contended synchronization又是指什么?我的是jdk1.5。


我想你应该补充JAVA基础知识了。
在一个thread执行同步一个对象, 跟多个thread执行同步一个对象关系
比如, 在一线程里独立拥有的对象所有的操作都是同步的, 那么每次操作都要获得锁, 这个是没有意义的。---无竞争同步
      在多个线程里, 这个对象所有操作被不同线程加锁, 那么他有是有意义。
gembler 2009-01-10   回复
sdh5724 写道
public void methodA(){

  Vector v = new Vector();
  v.put(Object);
  v.get(i)
}

这个操作没有锁。 因为Vector本是同步的。 JVM现在能自动识别是否需要锁。

刚才看了一下Vector的src
你所说的put是说add不?
发现Vector里尽是synchronized,如果说uncontended synchronization(无竞争的同步)是会出现synchronized,那么contended synchronization又是指什么?
我的是jdk1.5。
sdh5724 2009-01-06   回复
gembler 写道

sdh5724 写道public void methodA(){&nbsp; Vector v = new Vector();&nbsp; v.put(Object);&nbsp; v.get(i)}这个操作没有锁。 因为Vector本是同步的。 JVM现在能自动识别是否需要锁。明白,原来近在眼前。明白了之后,又有个小疑惑了:那么uncontended synchronization快还是contended synchronization快?我的想法是:contended synchronization快一点(不知道是错还是对,请指正)可是看到ibm的一篇文章,那xxx博士说:Cliff Click博士写道无竞争的同步(Uncontended synchronization)速度较慢原文地址:http://www.ibm.com/developerworks/cn/java/j- jone3/index.html

这个参数是未必会快的, 可能导致慢。。。。。。。。。。哈哈, 一个实验参数。
gembler 2009-01-06   回复
sdh5724 写道
public void methodA(){

  Vector v = new Vector();
  v.put(Object);
  v.get(i)
}

这个操作没有锁。 因为Vector本是同步的。 JVM现在能自动识别是否需要锁。


明白,原来近在眼前。

明白了之后,又有个小疑惑了:
那么uncontended synchronization快还是contended synchronization快?

我的想法是:contended synchronization快一点(不知道是错还是对,请指正)

可是看到ibm的一篇文章,那xxx博士说:
Cliff Click博士 写道
无竞争的同步(Uncontended synchronization)速度较慢

原文地址:http://www.ibm.com/developerworks/cn/java/j-jone3/index.html
sdh5724 2009-01-06   回复
gembler 写道

sdh5724 写道-XX:+UseBiasedLockingsun说是优化uncontended synchronization的所以弱弱地问一下,uncontended synchronization是什么意思?----------我要隔开我要隔开 ----------btw:-XX:+AggressiveOpts:sun 写道Note: this option is experimental!The specific optimizations enabled by this option can change from release to release and even build to build.



public void methodA(){

  Vector v = new Vector();
  v.put(Object);
  v.get(i)
}

这个操作没有锁。 因为Vector本是同步的。 JVM现在能自动识别是否需要锁。
gembler 2009-01-06   回复
sdh5724 写道
-XX:+UseBiasedLocking

sun说是优化uncontended synchronization的
所以弱弱地问一下,uncontended synchronization是什么意思?

----------我要隔开我要隔开----------

btw:
-XX:+AggressiveOpts:
sun 写道
Note: this option is experimental!
The specific optimizations enabled by this option can change from release to release and even build to build.

robbin 2008-12-23   回复
太专业了!
sdh5724 2008-12-08   回复
这个。。。。你应该多看看启动脚本怎么执行的。 我很少看这些产品的使用。
yxxcrtd 2008-12-08   回复
Tomcat 6.0.18 在哪儿设置呀?
谢谢!
分享到:
评论

相关推荐

    Java web仿京东商城的在线电子商务商城系统.(联系博主可帮忙安装系统)

    1. 安全性:使用HTTPS协议保障数据传输安全,防止中间人攻击。同时,敏感操作(如支付、密码修改)需进行二次验证。 2. 性能优化:利用缓存技术(如Redis)减少数据库查询压力,使用CDN加速静态资源加载,提高用户...

    博客的pc端和后台管理

    2. 内容管理:博主可以在后台创建、编辑和删除文章,支持预览功能,确保发布前内容无误。此外,还可以管理分类、标签,便于组织和检索文章。 3. 设置与个性化:后台允许博主自定义博客主题、颜色方案、头像等,以...

    ssm个人博客系统论文.doc

    管理员可以对整个系统进行维护,如添加、删除和修改博主信息,管理文章分类和内容,处理用户留言等。 - **博主后台**:博主拥有自己的个人中心,可以管理个人信息、发布和编辑博客文章、管理留言板。这个部分是博主...

    鸟哥linux学习途中感言-误删除/bin目录

    总的来说,这篇博文可能讲述了博主在学习Linux过程中,如何面对并处理误删除/bin目录这一重大错误的经验。这不仅是对个人技术能力的提升,也是对风险管理和问题解决策略的反思。学习Linux的过程中,了解系统的结构、...

    [博客空间]J-Blog v1.0_jblog10.rar

    J-Blog v1.0 的设计旨在简化内容发布、分类、评论管理以及个性化设置,为博主提供一个高效且灵活的平台来展示他们的想法、作品和故事。 这个软件的名称暗示了它基于Java技术开发,因为"J-"通常在编程领域用于代表...

    暗博生成工具

    CSDN是一个中国知名的IT技术交流平台,博主bagboy_taobao_com可能分享了关于这个工具的深入技术解析和实践经验。 标签“暗网”和“暗博”进一步明确了工具的用途,即与暗网博客有关。暗网博客可能用于那些希望保持...

    博客系统演示

    4. **内容管理**:后台的内容管理系统允许博主管理自己的文章,包括新建、编辑、删除、草稿保存、发布时间设定等功能。此外,还有可能提供版本控制,以便博主追溯和恢复过去的修改。 5. **评论系统**:博客中的互动...

    SpringBoot项目基于Springboot开发的精简博客系统的设计与实现.zip

    2. **文章管理**:允许博主对已发布和草稿文章进行管理,包括编辑、删除和发布等操作。 3. **评论系统**:读者可以在文章下留言评论,博主可以回复或审核评论,增强互动性。 4. **用户订阅**:读者可以通过邮件...

    JSP博客管理系统

    3. **评论系统**:用户可以对文章进行评论,博主可以审核、回复评论,甚至有举报和删除不当评论的机制。 4. **权限控制**:不同的用户角色(如普通用户、博主、管理员)有不同的操作权限,例如博主可以管理自己的...

    FormPanel的插入与删除

    5. **工具使用**:可能涉及到了一些辅助工具,比如调试工具、代码编辑器或性能分析工具,以帮助博主在开发过程中调试和优化FormPanel的插入与删除操作。 6. **card-dbproperty.js**:这个文件名可能表示一个卡片式...

    站长友链自助插件v1.3.zip

    4. **管理界面**:插件提供了一个专门的管理后台,博主可以在这里查看所有申请,进行审批、编辑或删除操作,对友链进行精细化管理。 5. **邮件通知**:当有新的友链申请时,博主会收到邮件通知,确保不会错过任何一...

    删除目录下所有指定名称的文件夹

    在描述中提到的“NULL”可能是博主在发布时没有填写具体描述,但我们可以根据常见的实践来解释这一过程。通常,这会涉及到使用命令行工具(如Windows的CMD或Linux的bash)或者编写简单的脚本,例如批处理文件(.bat...

    项目源码+毕设论文+数据库脚本 基于ssm+spring+springmvc+mybatis的个人博客系统

    基于SSM(Spring+SpringMVC+MyBatis)的个人博客系统是一个简单而强大的博客平台,它结合了Java的主流开发框架,...数据统计:博客系统提供了数据统计功能,可以统计博客的访问量、评论数等指标,帮助博主了解博客的

    用nodejs实现的一个静态文件服务器

    【无积分此资源可私信博主有偿获取】 可放心下载学习借鉴,你会有所收获。 —— 对于学习和实践,选择合适的项目和资源确实是一种有效的方式。 在进行毕业设计、课程设计或大作业时,选择具备学习借鉴价值的项目...

    博客管理系统需求分析.docx

    - 系统定义了三种角色:博主、博客管理员和游客。 - 博主可以发布、修改和删除博文,修改用户资料和密码,发表评论,管理相册等。 - 博客管理员负责管理用户、博客文章、相册、留言和公告,还能处理注册和删除...

    博客空间安全天使Blog系统(SaBlog) v2.8 Build 1101-sablog28.zip

    该系统集成了多种实用功能,旨在为博主提供一个既便捷又安全的创作环境。 一、系统概述 SaBlog v2.8是该系统的最新版本,Build 1101代表了这一特定版本的构建日期或编号,表明开发者在不断更新和优化产品,以满足...

    博客 留言板 管理系统

    3. **个人信息展示**:系统提供了个人信息展示的功能,用户可以设置个人简介、头像等,让访问者更好地了解博主。此外,个人信息页可能还包含联系信息、兴趣爱好等自定义字段,以便访客了解博主的更多信息。 4. **...

    SWT tableEditor删除后刷新

    描述中提到的博客链接指向了iteye上的一个帖子,虽然具体内容无法在这里提供,但可以推测博主可能遇到了在删除TableEditor后,表格未正确刷新的问题。这可能是因为没有正确处理TableItem的数据,或者在dispose()之后...

    基于ASP的绿色风格仿卢松松博客系统.zip

    2. **文章管理**:博主可以发布、编辑、删除文章,设置分类和标签,管理自己的博客内容。 3. **评论系统**:允许访客对文章进行评论,博主可以审核和回复评论。 4. **分类与标签**:文章可按照预设的分类和自定义...

    博客系统的设计与实现

    3. **博文管理**:博主发布、编辑和删除博文,这需要一个后台管理系统支持。涉及到的内容包括文本编辑器、图片上传、Markdown支持等。博文数据应存储在数据库中,可能还需要实现分页显示、搜索和排序等功能。 4. **...

Global site tag (gtag.js) - Google Analytics