Here is server stats graph plotted by grafana

And here is node stats:
On first image you can see cathastrophically low fpr periods(i noted then with red) which make hard influence on game lags.
Second image shows the same period of time. And fps is not affected on cpu/memory usage.
Also, there is no any errors or exceptions in console while fps dropping.
Here is reporter src class which is the only custom extension loaded on server:
Help :)

And here is node stats:
On first image you can see cathastrophically low fpr periods(i noted then with red) which make hard influence on game lags.Second image shows the same period of time. And fps is not affected on cpu/memory usage.
Also, there is no any errors or exceptions in console while fps dropping.
Here is reporter src class which is the only custom extension loaded on server:
using Oxide.Core;
using System;
using System.Net.Http;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using Oxide.Core.Plugins;
using Newtonsoft.Json;
namespace Oxide.Ext.ServerReporter
{
class Reporter
{
public static Reporter globalreporter;
class Server
{
public string name { get; set; }
public int maxplayers { get; set; }
public int online { get; set; }
public int fps { get; set; }
public int ents { get; set; }
public int ping { get; set; }
public long mem_alloc { get; set; }
}
public HttpClient client;
public Task reporter_thread;
public Reporter(Uri url, int interval, string token)
{
client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = url;
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Token", token);
reporter_thread = Task.Factory.StartNew(() =>
{
Interface.Oxide.LogInfo("Reporter started");
while (true)
{
try
{
var serverinfo = new Server
{
name = ConVar.Server.hostname,
maxplayers = ConVar.Server.maxplayers,
online = BasePlayer.activePlayerList.Count,
fps = Performance.report.frameRate,
ping = Performance.report.ping,
mem_alloc = Performance.report.memoryAllocations,
ents = BaseEntity.serverEntities.Count
};
var response = client.PostAsync("/metrics/update", new StringContent(JsonConvert.SerializeObject(serverinfo), Encoding.UTF8, "application/json")).GetAwaiter().GetResult();
if (response.StatusCode != HttpStatusCode.OK)
{
Interface.Oxide.LogError("[Reporter] Reporter thread request unsuccessfull (CODE: {0}): {1}", response.StatusCode, response.RequestMessage);
}
}
catch (Exception e)
{
Interface.Oxide.LogException("[Reporter] Reporter main thread thrown an exception ", e);
}
Thread.Sleep(interval);
}
});
}
}
}
And here is plugins loaded:
Help :)