Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4f6d4f4

Browse files
committed
2018-09-18
1 parent 0359adc commit 4f6d4f4

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

markdown-file/Java-bin.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
![image.png](https://upload-images.jianshu.io/upload_images/12159-6a94044da388bb0e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3434

35+
- 组成:Eden + Surviver(S0 + S1) + Old
3536
- 对象生命周期:Eden > Surviver(S0 + S1) > Old
3637
- Eden:该区域是最主要的刚创建的对象的内存分配区域,绝大多数对象都会被创建到这里(除了部分大对象通过内存担保机制创建到Old区域,默认大对象都是能够存活较长时间的),该区域的对象大部分都是短时间都会死亡的,故垃圾回收器针对该部分主要采用标记整理算法了回收该区域。
3738
- Surviver:该区域也是属于新生代的区域,该区域是将在Eden中未被清理的对象存放到该区域中,该区域分为两块区域,采用的是复制算法,每次只使用一块,Eden与Surviver区域的比例是8:1,是根据大量的业务运行总结出来的规律。
@@ -42,6 +43,10 @@
4243

4344
![image.png](https://upload-images.jianshu.io/upload_images/12159-deafd9588b74a2cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4445

46+
#### 更多这类文章
47+
48+
- [从实际案例聊聊Java应用的GC优化](https://tech.meituan.com/jvm_optimize.html)
49+
4550

4651
-------------------------------------------------------------
4752

@@ -271,7 +276,7 @@ tenured generation:
271276
-------------------------------------------------------------------
272277

273278

274-
## jstack
279+
## jstack(CPU 负载高)
275280

276281
- jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)
277282
- jstack用于生成java虚拟机当前时刻的线程快照。

markdown-file/Tomcat-Install-And-Settings.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,8 @@
165165
- 配比资料:<http://www.jianshu.com/p/d45e12241af4>
166166
- JDK8 配比:[关键系统的JVM参数推荐(2018仲夏版)](https://mp.weixin.qq.com/s/FHY0MelBfmgdRpT4zWF9dQ)
167167
- JDK8 常用配比总结 8G 内存:`CATALINA_OPTS="-Dfile.encoding=UTF-8 -Xms4g -Xmx4g"`
168-
- Java 的内存模型分为:
169-
- Young,年轻代(易被 GC)。Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区,其中 Survivor 区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在 Young 区间变满的时候,minor GC 就会将存活的对象移到空闲的Survivor 区间中,根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象将被移动到 Tenured 区间。
170-
- Tenured,终身代。Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在 Young 复制转移一定的次数以后,对象就会被转移到 Tenured 区,一般如果系统中用了 application 级别的缓存,缓存中的对象往往会被转移到这一区间。
171-
- Perm,永久代。主要保存 class,method,filed 对象,这部门的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到 java.lang.OutOfMemoryError : PermGen space 的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的 class 没有被卸载掉,这样就造成了大量的 class 对象保存在了 perm 中,这种情况下,一般重新启动应用服务器可以解决问题。
172-
- Linux 修改 /usr/program/tomcat7/bin/catalina.sh 文件,把下面信息添加到文件第一行。
168+
- Java 的内存模型看:[这篇文章](Java-bin.md)
169+
- Linux 修改 /usr/program/tomcat8/bin/catalina.sh 文件,把下面信息添加到文件第一行。
173170
- 如果服务器只运行一个 Tomcat,堆栈信息可以这样配置:
174171
- 机子内存如果是 4G:
175172
- `CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2g -Xmx2g"`
@@ -183,8 +180,10 @@
183180
- `-Xms2g -Xmx2g`
184181
- 如果是 16G 开发机
185182
- `-Xms4g -Xmx4g`
186-
- 还有一个参数:`-XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M`
187-
- 这个调试来确认什么值合适。
183+
- 还有一个参数:`-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M`
184+
- 这个可以通过调试来确认什么值合适,一般通过使用 `jstat -gc PID 250 20`,查看 gc 情况下的 MC、MU 情况。
185+
- 默认 MaxMetaspaceSize 是 -1,无上限,所以如果硬件还行,不配置也没啥问题。
186+
- 自己也了解 JVM 实际情况,那就根据实际情况调整。一般项目可以推荐:`-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M`
188187
- Windows 修改 /tomcat7/bin/catalina.bat 文件,找到这一行:`echo Using CATALINA_BASE: "%CATALINA_BASE%"`,然后在其上面添加如下内容,此方法只对解压版的 Tomcat 有效果,对于安装版本的需要点击安装后任务栏上的那个 Tomcat 图标,打开配置中有一个 `Java` Tab 的进行编辑。
189188
``` nginx
190189
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="UTF-8" -Dsun.jnu.encoding="UTF8" -Ddefault.client.encoding="UTF-8" -Duser.language=Zh

0 commit comments

Comments
 (0)