JAVA怎么定时启动服务进程(满意答案给高分)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA怎么定时启动服务进程(满意答案给高分)相关的知识,希望对你有一定的参考价值。
我现在有一个功能是数据搬迁的,我要定时启动他,多线程什么的我都写好,其他的一切都写好了.但是现在我要定时,比如我要定时到今天晚上11点钟启动这个服务,这个类的代码如下(下面代码只是起说明作用,可以在下面代码基础上给出提示):
public class StartDataMoveEngine implements ServletContextListener
private Timer timer = null ;
public void contextDestroyed(ServletContextEvent arg0)
timer.cancel() ;
public void contextInitialized(ServletContextEvent arg0)
DataMoveRun dmr = new DataMoveRun();
timer = new Timer();
Calendar calendar=Calendar.getInstance();
Date d1 = new Date() ;
Date date=new Date();
calendar.set(date.getYear(), date.getMonth(),date.getDay(),date.getHours(),date.getMinutes(),date.getSeconds());
timer.schedule(dmr, new Timestamp(calendar.getTimeInMillis()), 24*60*1000*60);//每隔24个小时运行一次
System.out.println("*************************"+new Date().getTime()+"启动数据迁移服务********************");
注明:上面代码是错误的,不能达到我的要求
if (当前时间到了11点)
做你的Task();
Thread.sleep(30*1000); //sleep 30 seconds
2、写一个.bat文件(里面调用你的Java类),用Windows的计划任务,每天11点执行这个.bat文件。
3、用开源的Quartz框架,专门做定时任务的。可能需要下载,看看文档,写几个配置文件。
推荐第三种,最专业的。 参考技术A 基本思想就是在你程序启动的时候获得当前时间,设为时间a,然后算出时间a到11点之间的时间间隔(毫秒),然后设置timer,task,定时爆发就可以了。
Linux下java进程CPU占用率高分析方法
Linux下java进程CPU占用率高分析方法
在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况。这种情况发生时,我们怎么去找出原因并解决。
一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用
1. 通过top命令找到可疑进程PID
top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie Cpu(s): 1.0%us, 4.9%sy, 0.0%ni, 93.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.5%st Mem: 2067816k total, 1756680k used, 311136k free, 236340k buffers Swap: 524284k total, 255508k used, 268776k free, 277040k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24138 apache 20 0 1273m 384m 3668 S 103.3 19.0 1232:39 java 3359 root 39 19 2704 36 0 S 0.3 0.0 4:39.34 gam_server 6696 root 20 0 34148 1604 244 S 0.3 0.1 5:06.63 httpd 19254 root 20 0 785m 221m 3176 S 0.3 11.0 9:04.36 java 1 root 20 0 2224 28 0 S 0.0 0.0 1:22.46 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:33.42 ksoftirqd/0 5 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u:0
从上面命令中可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138
2. 找出消耗资源最高的线程
top -H -p 24138 可以不用第一步,直接执行命令 top -H ,就可以查看到消耗资源最高的线程
top - 09:49:49 up 70 days, 16:41, 2 users, load average: 1.01, 1.04, 1.00 Tasks: 72 total, 1 running, 71 sleeping, 0 stopped, 0 zombie Cpu(s): 0.6%us, 1.3%sy, 0.0%ni, 97.7%id, 0.1%wa, 0.0%hi, 0.0%si, 0.2%st Mem: 2067816k total, 1760840k used, 306976k free, 236744k buffers Swap: 524284k total, 253344k used, 270940k free, 279092k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24167 apache 20 0 1273m 384m 3688 R 99.1 19.0 1169:43 java 24152 apache 20 0 1273m 384m 3688 S 2.0 19.0 0:28.58 java 24188 apache 20 0 1273m 384m 3688 S 2.0 19.0 4:56.69 java 24138 apache 20 0 1273m 384m 3688 S 0.0 19.0 0:00.00 java
3. 查看这个线程所有系统调用
strace -p 29679
4. 将需要的线程ID转换为16进制格式
printf "%x\n" 29679 73ef
5. 最后打印线程的堆栈信息:
jstack 29679|grep 73ef -A 30
通过这几步基本可以找出什么原因导致java进程占用那么高CPU资源。
以上是关于JAVA怎么定时启动服务进程(满意答案给高分)的主要内容,如果未能解决你的问题,请参考以下文章