项目部署在Tomcat7上,操作系统是centOS5.5,打印出gc的日志,发现有些full gc在heap还很空余的时候执行,后来仔细一看,发现一小时执行一次,日志如下:
2011-12-13T19:01:36.706+0800: 1.111: [Full GC (System) [PSYoungGen: 1936K->0K(597312K)] [PSOldGen: 0K->1860K(1365376K)] 1936K->1860K(1962688K) [PSPermGen: 10426K->10426K(21248K)], 0.0461030 secs] [Times: user=0.06 sys=0.00, real=0.04 secs]
2011-12-13T20:01:36.816+0800: 3601.221: [Full GC (System) [PSYoungGen: 33170K->0K(597312K)] [PSOldGen: 1860K->30610K(1365376K)] 35030K->30610K(1962688K) [PSPermGen: 52266K->52266K(52352K)], 0.3710140 secs] [Times: user=0.37 sys=0.01, real=0.37 secs]
2011-12-13T21:01:37.201+0800: 7201.606: [Full GC (System) [PSYoungGen: 3424K->0K(597312K)] [PSOldGen: 30610K->33665K(1365376K)] 34034K->33665K(1962688K) [PSPermGen: 52400K->52400K(83968K)], 0.3356130 secs] [Times: user=0.34 sys=0.00, real=0.33 secs]
然后google,发现是Tomcat的JreMemoryLeakPreventionListener调用的full gc,目的是为了方式内存泄露,其中的代码如下:
synchronized(GC.lock)
{
l = GC.latencyTarget;
if(l != 9223372036854775807L)
break label0;
GC.daemon = null;
}
return;
}
long l1 = GC.maxObjectInspectionAge();
if(l1 >= l)
{
System.gc();
l1 = 0L;
}
可以看到调用了System.gc(),有以下几种办法可以停止这个一小时一次的full gc:
1.通过添加jvm参数 -XX:+DisableExplicitGC 来制止显式调用的full gc,这里需要说一点:有些帖子说-XX:-DisableExplicitGC是停止full gc,-XX:+DisableExplicitGC是启动full gc,纯属扯淡。
2.给JreMemoryLeakPreventionListener添加一个参数,如下
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
gcDaemonProtection="false"/>
这样的话还是会有守护进程,只是不执行full gc了。
3.把这个listener从tomcat的server.xml里去掉。
我采用的是第2中方法。
分享到:
相关推荐
- `01 * * * * root run-parts /etc/cron.hourly`:表示每小时的第1分钟执行`/etc/cron.hourly`目录下的脚本。 - `02 4 * * * root run-parts /etc/cron.daily`:表示每天凌晨4点02分执行`/etc/cron.daily`目录下...
1. 笔记:这是学习过程中的记录,可能详细介绍了小时分析的步骤、方法以及遇到的问题和解决方案,对于初学者来说,这是一种很好的学习材料。 2. 脚本:可能是用于数据处理和分析的Python、R或SQL脚本。这些脚本可以...
- 每 4 小时执行一次 `/home/dbbackup/db2backup.sh` 脚本。 ```plaintext 0 3 *** /home/dbbackup/db1backup.sh backup 0 4 *** /home/dbbackup/db2backup.sh backup ``` - 使用通配符简化上述任务。 ```...
npm-released-hourly 是一个非常有趣的项目,它旨在每小时自动发布一次到NPM(Node Package Manager)。这个项目的核心概念是自动化发布流程,确保开发者能够更频繁地更新和分享他们的代码,以快速响应问题和改进。...
- **示例**:`*/1 * * * * /opt/bin/test-cron.sh` 表示每隔一分钟执行一次 `/opt/bin/test-cron.sh` 脚本。 #### 四、定时执行 PHP 脚本方法 ##### 方法 1:直接执行 PHP 脚本 - **命令示例**:`*/1 * * * * /usr/...
- `/etc/cron.hourly`:每小时执行一次。 - `/etc/cron.daily`:每天执行一次。 - `/etc/cron.weekly`:每周执行一次。 - `/etc/cron.monthly`:每月执行一次。 例如,要让系统每天自动更新索引,只需要将`/usr/bin...
done`将会每隔5秒执行一次`command`。 3. **注意事项**: 使用脚本循环时,如果长时间运行,可能会对系统资源造成一定压力,并且要注意循环中的命令不会因为脚本退出而停止。为了避免无限循环的脚本占据系统资源...
能源消耗的时间序列预测-hourly-energy-consumption.zip能源消耗的时间序列预测-hourly-energy-consumption.zip能源消耗的时间序列预测-hourly-energy-consumption.zip能源消耗的时间序列预测-hourly-energy-...
Hourly_Archive
通常,库的名称可以给我们一些线索,"hourly"可能与时间间隔、定时任务或者与小时相关的数据处理有关。在实际应用中,你可能可以利用这个库来创建定时任务、处理时间序列数据,或者执行其他与时间相关的操作。要了解...
例如,如果你想每小时执行一次`hourexec.sh`脚本,可以添加如下行到`crontab`文件: ```cron 0 * * * * /path/to/hourexec.sh ``` 这表示在每小时的第0分钟执行该脚本。 在实际应用中,可能需要根据具体需求调整...
/etc/crontab文件中的其余行定义了不同时间间隔执行的任务,如每小时执行一次的/cron.hourly目录下的任务,每天执行一次的/cron.daily目录下的任务,每周执行一次的/cron.weekly目录下的任务,以及每月执行一次的/...
每次修改完用户的cron设置后,cron会自动在`/var/spool/cron`下创建一个与用户同名的文件,无需重启cron服务,cron会每分钟检查一次这个文件以执行命令。 通过掌握这些基础知识,你就能有效地在Linux(CentOS)系统中...
PJM_Load_hourly.csv NI_hourly.csv pjm_hourly_est.csv PJMW_hourly.csv COMED_hourly.csv DEOK_hourly.csv DAYTON_hourly.csv DUQ_hourly.csv EKPC_hourly.csv FE_hourly.csv PJME_hourly.csv AEP_...
在 `/etc/crontab` 文件中添加系统级别的定时任务,例如每小时执行一次 `/etc/cron.hourly` 目录下的所有脚本: ```bash 0 * * * * root run-parts /etc/cron.hourly ``` ### 结论 `crontab` 和 `cron` 提供了...
标题中的"PyPI 官网下载 | hourly-0.3.11.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的软件包,名为`hourly`,版本为0.3.11,其打包格式是tar.gz。PyPI是Python社区的主要资源库,用于发布和发现...
在ArcGIS环境中运行了一个每小时15分钟的时间步长SWAT模型。由于默认输出是以每日时间步长表示的,因此修改了输出文件以包含亚小时输出。值得注意的是,本研究中使用的SWAT-CUP版本5.1.4.2是为每日、每月和每年的...
这行配置意味着脚本`/home/root/rmfile`将每半小时执行一次。 #### 3. 查找并管理其他Cron任务 为了更好地理解和管理所有已配置的Cron任务,可以查阅位于`/etc/cron.*`目录下的文件,其中的`.`代表`daily`、`...
- **每小时执行脚本**:`01 * * * * root run-parts /etc/cron.hourly` - **每天执行脚本**:`02 4 * * * root run-parts /etc/cron.daily` - **每星期执行脚本**:`22 4 * * 0 root run-parts /etc/cron.weekly` - ...
例如,每隔一分钟执行一次脚本 /opt/bin/test-cron.sh 可以在 cron.d 新建脚本 echo-date.sh,内容为: */1 * * * * root /opt/bin/test-cron.sh 也可以通过 at 命令来控制在指定的时间运行任务,如: at -f test...