04.02.2016, 12:01
Здравствуйте. У меня вот большая проблема - сервер падает, проработав, буквально только час.
Использующиеся плагины: gvar.so mysql.so sscanf.so ColAndreas_static.so streamer.so YSF.so
Тестил на рухостере, через час показывало нагрузку в 100%.
Таймер:
Всё, сервер падает даже когда нет игроков. Есть только этот таймер, по логам нет ничего такого, что могло бы создаться и т.д. Однако ЦП прыгнуло до 100. С чем может быть связано? Как лечить? Как измерить?
Использующиеся плагины: gvar.so mysql.so sscanf.so ColAndreas_static.so streamer.so YSF.so
Тестил на рухостере, через час показывало нагрузку в 100%.
Таймер:
Код:
SetTimer("SecondTimer",1000,1);
Код:
[15:37:30] Загружено 1 коробок [15:37:30] Загружено 0 костров [15:37:30] Загружено 0 костров [15:37:30] Загружено 846 видов крафта [15:37:30] Загружено 2000 видов пикапов [15:37:30] LoadGraffitiSystem[ Загрузка ... ] Потрачено: 2ms [15:37:30] Загружено 30 общин [15:37:30] {Last:1} Время: 15:37:30. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26522 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26523 [15:37:30] {Last:2} Время: 15:37:30. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26522 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26523 [15:37:31] {Last:1} Время: 15:37:31. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26522 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26523 [15:37:31] {Last:2} Время: 15:37:31. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26522 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26523 [15:37:32] {Last:1} Время: 15:37:32. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26522 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26523 [15:37:32] {Last:2} Время: 15:37:32. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26522 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26523 ... [15:46:37] {Last:1} Время: 15:46:37. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:37] {Last:2} Время: 15:46:37. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:38] {Last:1} Время: 15:46:38. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:38] {Last:2} Время: 15:46:38. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:39] {Last:1} Время: 15:46:39. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:39] {Last:2} Время: 15:46:39. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:40] {Last:1} Время: 15:46:40. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541 [15:46:40] {Last:2} Время: 15:46:40. Сервер работает! Streamer_GetTickRate: 50 | Streamer_CountItems: 26536 | Streamer_ProcessActiveItems: 1| Streamer_GetUpperBound: 26541
Код:
publics:SecondTimer() { new hour,minute,second; gettime(hour,minute,second); printf("{Last:1} Время: %02d:%02d:%02d. Сервер работает! Streamer_GetTickRate: %d | Streamer_CountItems: %d | Streamer_ProcessActiveItems: %d| Streamer_GetUpperBound: %d", hour, minute, second, Streamer_GetTickRate(), Streamer_CountItems(STREAMER_TYPE_OBJECT), Streamer_ProcessActiveItems(), Streamer_GetUpperBound(STREAMER_TYPE_OBJECT)); new GetTime = gettime()/*,vremya = GetTickCount()*/; if(ServerTimer <= GetTime && ServerTimer != 0) { ServerTimer = GetTime+20; WorldMinute++; if(WorldMinute >= 60) LastWorldTime = WorldTime, WorldTime++, WorldMinute = 0; if(WorldTime > 23) WorldTime = 0; SetWorldTime(WorldTime); if(Iter_Count(Player) > 0) PayDay(); } if(Iter_Count(Blood) > 0) { foreach(Blood, b) { if(BloodInfo[b][blTimer] > 0) { BloodInfo[b][blTimer]--; if(BloodInfo[b][blTimer] == 0) { DestroyDynamicObjectEx(BloodInfo[b][blObject],0); Iter_SafeRemove(Blood, b, b); } } } } if(Iter_Count(mine_Index) > 0) { foreach(mine_Index, i) { if(Mine_Data[i][m_active]) continue; new bool:active = true; foreach(Player, p) { if(Mine_Data[i][m_world] != GetPlayerVirtualWorld(p)) continue; if(Mine_Data[i][m_interior] != GetPlayerInterior(p)) continue; if(IsPlayerInRangeOfPoint(p, 5, Mine_Data[i][m_posX], Mine_Data[i][m_posY], Mine_Data[i][m_posZ])) { active = false; break; } } Mine_Data[i][m_active] = active; } } for(new zoneid = 0; zoneid < MAX_WEATHER_ZONE; zoneid++) { if(!WeatherZones[zoneid][ValidWeatherZone]) continue; WeatherZoneUpdater(zoneid); } timesdr++; if(timesdr == 300) { timesdr = 0; if(random(100) < 30) { new list[MAX_WEATHER_TYPES], idx = 0; for(new i = 0; i < MAX_WEATHER_TYPES; i++) { if(frandom(1.0) < WeatherData[i][weather_chance]) list[idx] = i, idx++; } if(idx > 0) { new whiterand = random(idx); if(whiterand >= 0 && whiterand < MAX_WEATHER_TYPES) { OnWeatherChange(gWeatherID, list[whiterand]); gWeatherID = list[whiterand]; printf("Серверная погода %s - %d", WeatherData[gWeatherID][weather_name], gWeatherID); } } } } foreach(Vehicle,i) { new modelcarol = GetVehicleModel(i); if(modelcarol >= 400) { if(!IsABMX(i) && VehicleInfo[i][vEngine] == true && !IsAPlane(i)) { if(VehicleInfo[i][vFuel] >= VehicleOption[modelcarol-400][vehRashod]) { VehicleInfo[i][vFuel] -= VehicleOption[modelcarol-400][vehRashod];//-= 0.007 if(VehicleInfo[i][vFuel] <= 0) VehicleInfo[i][vFuel] = 0.0, GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective),SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective),VehicleInfo[i][vEngine] = false; } else VehicleInfo[i][vFuel] = 0.0, GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective),SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective),VehicleInfo[i][vEngine] = false; } } } if((minute == 30 || minute == 0) && second == 0) { for(new f = 0;f < 5;f++) { new Float:b_x = frandom(3000.0); if(random(2) == 0) b_x = -b_x; new Float:b_y = frandom(3000.0); if(random(2) == 0) b_y = -b_y; new Float: b_z; CA_FindZ_For2DCoord(b_x, b_y, b_z); FogPos[f][0] = b_x; FogPos[f][1] = b_y; FogPos[f][2] = b_z; printf("Аномалия Fog №%d | X: %f, Y: %f, Z = %f", f, b_x, b_y, b_z); b_z -= 2.5; for(new i = 0;i < 20;i++) { SetDynamicObjectPos(AnomalyUranFog[f*80+i], b_x+floatsin(18*i, degrees)*4, b_y+floatcos(18*i, degrees)*4, b_z+random(3)); SetDynamicObjectRot(AnomalyUranFog[f*80+i], 0.0, 0.0, -18*i); SetDynamicObjectPos(AnomalyUranFog[f*80+i+1], b_x+floatsin(18*i, degrees)*3, b_y+floatcos(18*i, degrees)*3, b_z+random(3)); SetDynamicObjectRot(AnomalyUranFog[f*80+i+1], 0.0, 0.0, -18*i); SetDynamicObjectPos(AnomalyUranFog[f*80+i+2], b_x+floatsin(18*i, degrees)*2, b_y+floatcos(18*i, degrees)*2, b_z+random(3)); SetDynamicObjectRot(AnomalyUranFog[f*80+i+2], 0.0, 0.0, -18*i); SetDynamicObjectPos(AnomalyUranFog[f*80+i+3], b_x+floatsin(18*i, degrees), b_y+floatcos(18*i, degrees), b_z+random(3)); SetDynamicObjectRot(AnomalyUranFog[f*80+i+3], 0.0, 0.0, -18*i); } } } printf("{Last:2} Время: %02d:%02d:%02d. Сервер работает! Streamer_GetTickRate: %d | Streamer_CountItems: %d | Streamer_ProcessActiveItems: %d| Streamer_GetUpperBound: %d", hour, minute, second, Streamer_GetTickRate(), Streamer_CountItems(STREAMER_TYPE_OBJECT), Streamer_ProcessActiveItems(), Streamer_GetUpperBound(STREAMER_TYPE_OBJECT)); return 1; }