diff options
Diffstat (limited to 'OpenSim/Framework/Servers/ServerBase.cs')
-rw-r--r-- | OpenSim/Framework/Servers/ServerBase.cs | 154 |
1 files changed, 152 insertions, 2 deletions
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs index eb8c9f8..7108314 100644 --- a/OpenSim/Framework/Servers/ServerBase.cs +++ b/OpenSim/Framework/Servers/ServerBase.cs | |||
@@ -246,7 +246,7 @@ namespace OpenSim.Framework.Servers | |||
246 | "Show thread status", HandleShow); | 246 | "Show thread status", HandleShow); |
247 | 247 | ||
248 | m_console.Commands.AddCommand( | 248 | m_console.Commands.AddCommand( |
249 | "General", false, "threads abort", | 249 | "Debug", false, "threads abort", |
250 | "threads abort <thread-id>", | 250 | "threads abort <thread-id>", |
251 | "Abort a managed thread. Use \"show threads\" to find possible threads.", HandleThreadsAbort); | 251 | "Abort a managed thread. Use \"show threads\" to find possible threads.", HandleThreadsAbort); |
252 | 252 | ||
@@ -256,8 +256,32 @@ namespace OpenSim.Framework.Servers | |||
256 | "Show thread status. Synonym for \"show threads\"", | 256 | "Show thread status. Synonym for \"show threads\"", |
257 | (string module, string[] args) => Notice(GetThreadsReport())); | 257 | (string module, string[] args) => Notice(GetThreadsReport())); |
258 | 258 | ||
259 | m_console.Commands.AddCommand ( | ||
260 | "Debug", false, "debug comms set", | ||
261 | "debug comms set serialosdreq true|false", | ||
262 | "Set comms parameters. For debug purposes.", | ||
263 | HandleDebugCommsSet); | ||
264 | |||
265 | m_console.Commands.AddCommand ( | ||
266 | "Debug", false, "debug comms status", | ||
267 | "debug comms status", | ||
268 | "Show current debug comms parameters.", | ||
269 | HandleDebugCommsStatus); | ||
270 | |||
271 | m_console.Commands.AddCommand ( | ||
272 | "Debug", false, "debug threadpool set", | ||
273 | "debug threadpool set worker|iocp min|max <n>", | ||
274 | "Set threadpool parameters. For debug purposes.", | ||
275 | HandleDebugThreadpoolSet); | ||
276 | |||
277 | m_console.Commands.AddCommand ( | ||
278 | "Debug", false, "debug threadpool status", | ||
279 | "debug threadpool status", | ||
280 | "Show current debug threadpool parameters.", | ||
281 | HandleDebugThreadpoolStatus); | ||
282 | |||
259 | m_console.Commands.AddCommand( | 283 | m_console.Commands.AddCommand( |
260 | "General", false, "force gc", | 284 | "Debug", false, "force gc", |
261 | "force gc", | 285 | "force gc", |
262 | "Manually invoke runtime garbage collection. For debugging purposes", | 286 | "Manually invoke runtime garbage collection. For debugging purposes", |
263 | HandleForceGc); | 287 | HandleForceGc); |
@@ -272,16 +296,142 @@ namespace OpenSim.Framework.Servers | |||
272 | "shutdown", | 296 | "shutdown", |
273 | "Quit the application", (mod, args) => Shutdown()); | 297 | "Quit the application", (mod, args) => Shutdown()); |
274 | 298 | ||
299 | ChecksManager.RegisterConsoleCommands(m_console); | ||
275 | StatsManager.RegisterConsoleCommands(m_console); | 300 | StatsManager.RegisterConsoleCommands(m_console); |
276 | } | 301 | } |
277 | 302 | ||
278 | public void RegisterCommonComponents(IConfigSource configSource) | 303 | public void RegisterCommonComponents(IConfigSource configSource) |
279 | { | 304 | { |
305 | IConfig networkConfig = configSource.Configs["Network"]; | ||
306 | |||
307 | if (networkConfig != null) | ||
308 | { | ||
309 | WebUtil.SerializeOSDRequestsPerEndpoint = networkConfig.GetBoolean("SerializeOSDRequests", false); | ||
310 | } | ||
311 | |||
280 | m_serverStatsCollector = new ServerStatsCollector(); | 312 | m_serverStatsCollector = new ServerStatsCollector(); |
281 | m_serverStatsCollector.Initialise(configSource); | 313 | m_serverStatsCollector.Initialise(configSource); |
282 | m_serverStatsCollector.Start(); | 314 | m_serverStatsCollector.Start(); |
283 | } | 315 | } |
284 | 316 | ||
317 | private void HandleDebugCommsStatus(string module, string[] args) | ||
318 | { | ||
319 | Notice("serialosdreq is {0}", WebUtil.SerializeOSDRequestsPerEndpoint); | ||
320 | } | ||
321 | |||
322 | private void HandleDebugCommsSet(string module, string[] args) | ||
323 | { | ||
324 | if (args.Length != 5) | ||
325 | { | ||
326 | Notice("Usage: debug comms set serialosdreq true|false"); | ||
327 | return; | ||
328 | } | ||
329 | |||
330 | if (args[3] != "serialosdreq") | ||
331 | { | ||
332 | Notice("Usage: debug comms set serialosdreq true|false"); | ||
333 | return; | ||
334 | } | ||
335 | |||
336 | bool setSerializeOsdRequests; | ||
337 | |||
338 | if (!ConsoleUtil.TryParseConsoleBool(m_console, args[4], out setSerializeOsdRequests)) | ||
339 | return; | ||
340 | |||
341 | WebUtil.SerializeOSDRequestsPerEndpoint = setSerializeOsdRequests; | ||
342 | |||
343 | Notice("serialosdreq is now {0}", setSerializeOsdRequests); | ||
344 | } | ||
345 | |||
346 | private void HandleDebugThreadpoolStatus(string module, string[] args) | ||
347 | { | ||
348 | int workerThreads, iocpThreads; | ||
349 | |||
350 | ThreadPool.GetMinThreads(out workerThreads, out iocpThreads); | ||
351 | Notice("Min worker threads: {0}", workerThreads); | ||
352 | Notice("Min IOCP threads: {0}", iocpThreads); | ||
353 | |||
354 | ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads); | ||
355 | Notice("Max worker threads: {0}", workerThreads); | ||
356 | Notice("Max IOCP threads: {0}", iocpThreads); | ||
357 | |||
358 | ThreadPool.GetAvailableThreads(out workerThreads, out iocpThreads); | ||
359 | Notice("Available worker threads: {0}", workerThreads); | ||
360 | Notice("Available IOCP threads: {0}", iocpThreads); | ||
361 | } | ||
362 | |||
363 | private void HandleDebugThreadpoolSet(string module, string[] args) | ||
364 | { | ||
365 | if (args.Length != 6) | ||
366 | { | ||
367 | Notice("Usage: debug threadpool set worker|iocp min|max <n>"); | ||
368 | return; | ||
369 | } | ||
370 | |||
371 | int newThreads; | ||
372 | |||
373 | if (!ConsoleUtil.TryParseConsoleInt(m_console, args[5], out newThreads)) | ||
374 | return; | ||
375 | |||
376 | string poolType = args[3]; | ||
377 | string bound = args[4]; | ||
378 | |||
379 | bool fail = false; | ||
380 | int workerThreads, iocpThreads; | ||
381 | |||
382 | if (poolType == "worker") | ||
383 | { | ||
384 | if (bound == "min") | ||
385 | { | ||
386 | ThreadPool.GetMinThreads(out workerThreads, out iocpThreads); | ||
387 | |||
388 | if (!ThreadPool.SetMinThreads(newThreads, iocpThreads)) | ||
389 | fail = true; | ||
390 | } | ||
391 | else | ||
392 | { | ||
393 | ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads); | ||
394 | |||
395 | if (!ThreadPool.SetMaxThreads(newThreads, iocpThreads)) | ||
396 | fail = true; | ||
397 | } | ||
398 | } | ||
399 | else | ||
400 | { | ||
401 | if (bound == "min") | ||
402 | { | ||
403 | ThreadPool.GetMinThreads(out workerThreads, out iocpThreads); | ||
404 | |||
405 | if (!ThreadPool.SetMinThreads(workerThreads, newThreads)) | ||
406 | fail = true; | ||
407 | } | ||
408 | else | ||
409 | { | ||
410 | ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads); | ||
411 | |||
412 | if (!ThreadPool.SetMaxThreads(workerThreads, newThreads)) | ||
413 | fail = true; | ||
414 | } | ||
415 | } | ||
416 | |||
417 | if (fail) | ||
418 | { | ||
419 | Notice("ERROR: Could not set {0} {1} threads to {2}", poolType, bound, newThreads); | ||
420 | } | ||
421 | else | ||
422 | { | ||
423 | int minWorkerThreads, maxWorkerThreads, minIocpThreads, maxIocpThreads; | ||
424 | |||
425 | ThreadPool.GetMinThreads(out minWorkerThreads, out minIocpThreads); | ||
426 | ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxIocpThreads); | ||
427 | |||
428 | Notice("Min worker threads now {0}", minWorkerThreads); | ||
429 | Notice("Min IOCP threads now {0}", minIocpThreads); | ||
430 | Notice("Max worker threads now {0}", maxWorkerThreads); | ||
431 | Notice("Max IOCP threads now {0}", maxIocpThreads); | ||
432 | } | ||
433 | } | ||
434 | |||
285 | private void HandleForceGc(string module, string[] args) | 435 | private void HandleForceGc(string module, string[] args) |
286 | { | 436 | { |
287 | Notice("Manually invoking runtime garbage collection"); | 437 | Notice("Manually invoking runtime garbage collection"); |