# java **Repository Path**: fashionbrot/java ## Basic Information - **Project Name**: java - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-20 - **Last Updated**: 2025-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jvm 相关 ## 查看gc ```bash # 一秒输出一次gc信息 jstat -gc 1000 ``` ## 查看jvm 参数 ```bash jinfo ``` ## jmap 堆内存快照 ```bash #查看堆内存摘要 jmap -heap #查看堆内存中的对象统计前50个 jmap -histo | head -n 50 ``` ## 生成快照 ```bash jstack -l > thread_dump.txt #查找死锁信息 #在生成的线程快照文件中,搜索关键字 deadlock 或 Found one Java-level deadlock。jstack 会自动检测死锁,并在文件末尾列出死锁的详细信息 ``` ### 服务器内存小,服务器如何配置jvm 参数 #### 1.1 初始堆大小 (-Xms) 和 最大堆大小 (-Xmx) 应设置为相同值,避免堆内存动态调整的开销。 根据服务器内存总量(7.4G)和其他进程(如 Nginx)的内存需求,建议为单个 Java 进程分配 2G~3G 的堆内存。 #### 1.2 年轻代大小 (-Xmn) 年轻代是对象创建的初始区域,适当增大年轻代可以减少对象过早晋升到老年代。建议年轻代占堆内存的 1/3~1/2。 #### 2.1 使用 CMS 垃圾回收器 CMS(Concurrent Mark-Sweep)是一种低延迟垃圾回收器,适合内存有限且需要快速响应的场景。 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 #### 2.2 避免 Full GC 通过调整 CMSInitiatingOccupancyFraction(默认 68),在老年代使用率达到 75% 时启动 CMS GC,避免过早触发 Full GC。 #### 3. Metaspace 配置 Metaspace 用于存储类的元数据,默认情况下会动态调整大小。为了避免 Metaspace 无限增长,可以设置初始大小和最大大小。 #### 4. 线程栈大小 每个线程会占用一定的栈空间,默认值为 1M(64 位 JVM)。如果线程数较多,可以适当减小栈大小。 -Xss256K #### 5. GC 日志配置 启用 GC 日志,便于分析内存使用情况和 GC 性能。 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/path/to/gc.log #### 6.1 禁用显式 GC 防止代码中调用 System.gc() 导致的性能问题。 -XX:+DisableExplicitGC #### 6.2 启用压缩指针 减少内存占用,提升性能。 -XX:+UseCompressedOops -XX:+UseCompressedClassPointers #### 6.3 启用快速访问器方法 优化访问器方法的性能 -XX:+UseFastAccessorMethods #### 完整示例 -Xms2G -Xmx2G -Xmn1G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -Xss256K -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+DisableExplicitGC -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+UseFastAccessorMethods -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/path/to/gc.log