Я написал программу для вызова через 24 часа в сутки. И у меня есть 350 работающих устройств на сервере. Мне нужно обновлять отчет об устройствах автоматически каждый день.
@POST
@Path("/UpdateDevicesStats")
public static void updateAllLiveDevicesStats(){
long period = 1*24*60*60*1000;
long delay = 0;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
try {
ArrayList<Device> devices = DeviceBuilder.getCurrentLiveDevices();
try {
for(int i=0;i<devices.size();i++){
System.out.println("Updating Device = "+devices.get(i).getId());
// This below line is custom code line.
// This is not any in-built library.
SummaryBuilder.updateDBStats(devices.get(i).getId());
Thread.sleep(1*60*1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, delay, period);
}
Когда я запускаю этот кусок кода. Это идет очень хорошо в течение 4-5 часов, но после этого показывает мне следующее:
failed: error='Cannot allocate memory' (errno=12)
There is insufficient memory for the Java Runtime Environment to continue. Native memory allocation (mmap) failed to map 12288 bytes for committing reserved memory.
ignoring option PermSize=500m; support was removed in 8.0
ignoring option MaxPermSize=256m; support was removed in 8.0
Setting property 'maxSpareThreads' to '75' did not find a matching property.
Кто-нибудь знает какой-нибудь другой лучший подход?