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;
}


