public function check() { $d = Utils::getRealMemoryUsage(); $u = Utils::getMemoryUsage(true); $usage = round($u[0] / 1024 / 1024, 2) . "/" . round($d[0] / 1024 / 1024, 2) . "/" . round($u[1] / 1024 / 1024, 2) . "/" . round($u[2] / 1024 / 1024, 2) . " MB @ " . Utils::getThreadCount() . " threads"; $serverStatus = serialize(["online" => count($this->server->getOnlinePlayers()), "max" => $this->server->getMaxPlayers(), "upload" => round($this->server->getNetwork()->getUpload() / 1024, 2), "download" => round($this->server->getNetwork()->getDownload() / 1024, 2), "tps" => $this->server->getTicksPerSecondAverage(), "load" => $this->server->getTickUsageAverage(), "usage" => $usage]); for ($n = 0; $n < $this->threads; ++$n) { if (!$this->workers[$n]->isTerminated()) { $this->workers[$n]->serverStatus = $serverStatus; } if ($this->workers[$n]->isTerminated() === true) { $this->workers[$n] = new RCONInstance($this->socket, $this->password, $this->clientsPerThread); } elseif ($this->workers[$n]->isWaiting()) { if ($this->workers[$n]->response !== "") { $this->server->getLogger()->info($this->workers[$n]->response); $this->workers[$n]->synchronized(function (RCONInstance $thread) { $thread->notify(); }, $this->workers[$n]); } else { $response = new RemoteConsoleCommandSender(); $command = $this->workers[$n]->cmd; $this->server->getPluginManager()->callEvent($ev = new RemoteServerCommandEvent($response, $command)); if (!$ev->isCancelled()) { $this->server->dispatchCommand($ev->getSender(), $ev->getCommand()); } $this->workers[$n]->response = $response->getMessage(); $this->workers[$n]->synchronized(function (RCONInstance $thread) { $thread->notify(); }, $this->workers[$n]); } } } }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } $rUsage = Utils::getRealMemoryUsage(); $mUsage = Utils::getMemoryUsage(true); $server = $sender->getServer(); $sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "%pocketmine.command.status.title" . TextFormat::GREEN . " ----"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.player " . TextFormat::GREEN . count($sender->getServer()->getOnlinePlayers()) . "/" . $sender->getServer()->getMaxPlayers()); $time = microtime(true) - \pocketmine\START_TIME; $seconds = floor($time % 60); $minutes = null; $hours = null; $days = null; if ($time >= 60) { $minutes = floor($time % 3600 / 60); if ($time >= 3600) { $hours = floor($time % (3600 * 24) / 3600); if ($time >= 3600 * 24) { $days = floor($time / (3600 * 24)); } } } $uptime = ($minutes !== null ? ($hours !== null ? ($days !== null ? "{$days} %pocketmine.command.status.days " : "") . "{$hours} %pocketmine.command.status.hours " : "") . "{$minutes} %pocketmine.command.status.minutes " : "") . "{$seconds} %pocketmine.command.status.seconds"; $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.uptime " . TextFormat::RED . $uptime); $tpsColor = TextFormat::GREEN; if ($server->getTicksPerSecondAverage() < 10) { $tpsColor = TextFormat::GOLD; } elseif ($server->getTicksPerSecondAverage() < 1) { $tpsColor = TextFormat::RED; } $tpsColour = TextFormat::GREEN; if ($server->getTicksPerSecond() < 10) { $tpsColour = TextFormat::GOLD; } elseif ($server->getTicksPerSecond() < 1) { $tpsColour = TextFormat::RED; } $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.AverageTPS " . $tpsColor . $server->getTicksPerSecondAverage() . " (" . $server->getTickUsageAverage() . "%)"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.CurrentTPS " . $tpsColour . $server->getTicksPerSecond() . " (" . $server->getTickUsage() . "%)"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Networkupload " . TextFormat::RED . round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Networkdownload " . TextFormat::RED . round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Threadcount " . TextFormat::RED . Utils::getThreadCount()); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Mainmemory " . TextFormat::RED . number_format(round($mUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Totalmemory " . TextFormat::RED . number_format(round($mUsage[1] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Totalvirtualmemory " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Heapmemory " . TextFormat::RED . number_format(round($rUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Maxmemorysystem " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); if ($server->getProperty("memory.global-limit") > 0) { $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Maxmemorymanager " . TextFormat::RED . number_format(round($server->getProperty("memory.global-limit"), 2)) . " MB."); } foreach ($server->getLevels() as $level) { $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.World \"" . $level->getFolderName() . "\"" . ($level->getFolderName() !== $level->getName() ? " (" . $level->getName() . ")" : "") . ": " . TextFormat::RED . number_format(count($level->getChunks())) . TextFormat::GREEN . " %pocketmine.command.status.chunks " . TextFormat::RED . number_format(count($level->getEntities())) . TextFormat::GREEN . " %pocketmine.command.status.entities " . TextFormat::RED . number_format(count($level->getTiles())) . TextFormat::GREEN . " %pocketmine.command.status.tiles " . "%pocketmine.command.status.Time " . (($level->getTickRate() > 1 or $level->getTickRateTime() > 40) ? TextFormat::RED : TextFormat::YELLOW) . round($level->getTickRateTime(), 2) . "%pocketmine.command.status.ms" . ($level->getTickRate() > 1 ? " (tick rate " . $level->getTickRate() . ")" : "")); } return true; }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return \true; } $mUsage = Utils::getMemoryUsage(\true); $rUsage = Utils::getRealMemoryUsage(\true); $server = $sender->getServer(); $sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "服务器状态" . TextFormat::GREEN . " ----"); $sender->sendMessage(TextFormat::GOLD . "服务器人数: " . TextFormat::GREEN . \count($sender->getServer()->getOnlinePlayers()) . "/" . $sender->getServer()->getMaxPlayers()); $time = \microtime(\true) - \pocketmine\START_TIME; $seconds = \floor($time % 60); $minutes = \null; $hours = \null; $days = \null; if ($time >= 60) { $minutes = \floor($time % 3600 / 60); if ($time >= 3600) { $hours = \floor($time % (3600 * 24) / 3600); if ($time >= 3600 * 24) { $days = \floor($time / (3600 * 24)); } } } $uptime = ($minutes !== \null ? ($hours !== \null ? ($days !== \null ? "{$days} 天 " : "") . "{$hours} 小时 " : "") . "{$minutes} 分 " : "") . "{$seconds} 秒"; $sender->sendMessage(TextFormat::GOLD . "运行时间: " . TextFormat::RED . $uptime); $tpsColor = TextFormat::GREEN; if ($server->getTicksPerSecondAverage() < 10) { $tpsColor = TextFormat::GOLD; } elseif ($server->getTicksPerSecondAverage() < 1) { $tpsColor = TextFormat::RED; } $tpsColour = TextFormat::GREEN; if ($server->getTicksPerSecond() < 10) { $tpsColour = TextFormat::GOLD; } elseif ($server->getTicksPerSecond() < 1) { $tpsColour = TextFormat::RED; } $sender->sendMessage(TextFormat::GOLD . "平均TPS: " . $tpsColor . $server->getTicksPerSecondAverage() . " (" . $server->getTickUsageAverage() . "%)"); $sender->sendMessage(TextFormat::GOLD . "瞬时TPS: " . $tpsColour . $server->getTicksPerSecond() . " (" . $server->getTickUsage() . "%)"); $sender->sendMessage(TextFormat::GOLD . "网络上传: " . TextFormat::RED . \round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "网络下载: " . TextFormat::RED . \round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "线程总数: " . TextFormat::RED . Utils::getThreadCount()); $sender->sendMessage(TextFormat::GOLD . "主线程内存: " . TextFormat::RED . \number_format(\round($mUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "总内存: " . TextFormat::RED . \number_format(\round($mUsage[1] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "总虚拟内存: " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "堆栈内存: " . TextFormat::RED . number_format(round($rUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "系统最大内存: " . TextFormat::RED . \number_format(\round($mUsage[2] / 1024 / 1024, 2)) . " MB."); if ($server->getProperty("memory.global-limit") > 0) { $sender->sendMessage(TextFormat::GOLD . "核心全局最大内存: " . TextFormat::RED . \number_format(\round($server->getProperty("memory.global-limit"), 2)) . " MB."); } foreach ($server->getLevels() as $level) { $sender->sendMessage(TextFormat::GOLD . "世界 \"" . $level->getFolderName() . "\"" . ($level->getFolderName() !== $level->getName() ? " (" . $level->getName() . ")" : "") . ": " . TextFormat::RED . \number_format(\count($level->getChunks())) . TextFormat::GREEN . " 区块, " . TextFormat::RED . \number_format(\count($level->getEntities())) . TextFormat::GREEN . " 实体, " . TextFormat::RED . \number_format(\count($level->getTiles())) . TextFormat::GREEN . " tiles. " . "时间 " . (($level->getTickRate() > 1 or $level->getTickRateTime() > 40) ? TextFormat::RED : TextFormat::YELLOW) . \round($level->getTickRateTime(), 2) . "毫秒" . ($level->getTickRate() > 1 ? " (tick rate " . $level->getTickRate() . ")" : "")); } return \true; }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } $rUsage = Utils::getRealMemoryUsage(); $mUsage = Utils::getMemoryUsage(true); $server = $sender->getServer(); $sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "Server status" . TextFormat::GREEN . " ----"); $time = microtime(true) - \pocketmine\START_TIME; $seconds = floor($time % 60); $minutes = null; $hours = null; $days = null; if ($time >= 60) { $minutes = floor($time % 3600 / 60); if ($time >= 3600) { $hours = floor($time % (3600 * 24) / 3600); if ($time >= 3600 * 24) { $days = floor($time / (3600 * 24)); } } } $uptime = ($minutes !== null ? ($hours !== null ? ($days !== null ? "{$days} days " : "") . "{$hours} hours " : "") . "{$minutes} minutes " : "") . "{$seconds} seconds"; $sender->sendMessage(TextFormat::GOLD . "Uptime: " . TextFormat::RED . $uptime); $tpsColor = TextFormat::GREEN; if ($server->getTicksPerSecond() < 17) { $tpsColor = TextFormat::GOLD; } elseif ($server->getTicksPerSecond() < 12) { $tpsColor = TextFormat::RED; } $sender->sendMessage(TextFormat::GOLD . "Current TPS: {$tpsColor}{$server->getTicksPerSecond()} ({$server->getTickUsage()}%)"); $sender->sendMessage(TextFormat::GOLD . "Network upload: " . TextFormat::RED . round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "Network download: " . TextFormat::RED . round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "Thread count: " . TextFormat::RED . Utils::getThreadCount()); $sender->sendMessage(TextFormat::GOLD . "Main thread memory: " . TextFormat::RED . number_format(round($mUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "Total memory: " . TextFormat::RED . number_format(round($mUsage[1] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "Total virtual memory: " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "Heap memory: " . TextFormat::RED . number_format(round($rUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "Maximum memory (system): " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); if ($server->getProperty("memory.global-limit") > 0) { $sender->sendMessage(TextFormat::GOLD . "Maximum memory (manager): " . TextFormat::RED . number_format(round($server->getProperty("memory.global-limit"), 2)) . " MB."); } foreach ($server->getLevels() as $level) { $levelName = $level->getFolderName() !== $level->getName() ? " (" . $level->getName() . ")" : ""; $timeColor = ($level->getTickRate() > 1 or $level->getTickRateTime() > 40) ? TextFormat::RED : TextFormat::YELLOW; $tickRate = $level->getTickRate() > 1 ? " (tick rate " . $level->getTickRate() . ")" : ""; $sender->sendMessage(TextFormat::GOLD . "World \"{$level->getFolderName()}\"{$levelName}: " . TextFormat::RED . number_format(count($level->getChunks())) . TextFormat::GREEN . " chunks, " . TextFormat::RED . number_format(count($level->getEntities())) . TextFormat::GREEN . " entities, " . TextFormat::RED . number_format(count($level->getTiles())) . TextFormat::GREEN . " tiles. " . "Time {$timeColor}" . round($level->getTickRateTime(), 2) . "ms" . $tickRate); } return true; }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } $mUsage = Utils::getMemoryUsage(true); $server = $sender->getServer(); $sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "Server status" . TextFormat::GREEN . " ----"); $sender->sendMessage(TextFormat::GOLD . "TPS: " . TextFormat::WHITE . $server->getTicksPerSecond()); $sender->sendMessage(TextFormat::GOLD . "TPS Load: " . TextFormat::WHITE . $server->getTickUsage() . "%"); $sender->sendMessage(TextFormat::GOLD . "Upload: " . TextFormat::WHITE . round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "Download: " . TextFormat::WHITE . round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "Memory: " . TextFormat::WHITE . round($mUsage[0] / 1024 / 1024, 2) . "/" . round($mUsage[1] / 1024 / 1024, 2) . "/" . round($mUsage[2] / 1024 / 1024, 2) . " MB"); $sender->sendMessage(TextFormat::GOLD . "Threads: " . TextFormat::WHITE . Utils::getThreadCount()); return true; }
public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } $mUsage = Utils::getMemoryUsage(true); $rUsage = Utils::getRealMemoryUsage(); $server = $sender->getServer(); $onlineCount = 0; foreach ($sender->getServer()->getOnlinePlayers() as $player) { if ($player->isOnline() and (!$sender instanceof Player or $sender->canSee($player))) { ++$onlineCount; } } $sender->sendMessage(TextFormat::GREEN . "---- " . TextFormat::WHITE . "%pocketmine.command.status.title" . TextFormat::GREEN . " ----"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.player" . TextFormat::GREEN . " " . $onlineCount . "/" . $sender->getServer()->getMaxPlayers()); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.uptime " . TextFormat::RED . $sender->getServer()->getUptime()); $tpsColor = TextFormat::GREEN; if ($server->getTicksPerSecondAverage() < 10) { $tpsColor = TextFormat::GOLD; } elseif ($server->getTicksPerSecondAverage() < 1) { $tpsColor = TextFormat::RED; } $tpsColour = TextFormat::GREEN; if ($server->getTicksPerSecond() < 10) { $tpsColour = TextFormat::GOLD; } elseif ($server->getTicksPerSecond() < 1) { $tpsColour = TextFormat::RED; } $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.AverageTPS " . $tpsColor . $server->getTicksPerSecondAverage() . " (" . $server->getTickUsageAverage() . "%)"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.CurrentTPS " . $tpsColour . $server->getTicksPerSecond() . " (" . $server->getTickUsage() . "%)"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Networkupload " . TextFormat::RED . \round($server->getNetwork()->getUpload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Networkdownload " . TextFormat::RED . \round($server->getNetwork()->getDownload() / 1024, 2) . " kB/s"); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Threadcount " . TextFormat::RED . Utils::getThreadCount()); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Mainmemory " . TextFormat::RED . number_format(round($mUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Totalmemory " . TextFormat::RED . number_format(round($mUsage[1] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Totalvirtualmemory " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Heapmemory " . TextFormat::RED . number_format(round($rUsage[0] / 1024 / 1024, 2)) . " MB."); $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Maxmemorysystem " . TextFormat::RED . number_format(round($mUsage[2] / 1024 / 1024, 2)) . " MB."); if ($server->getProperty("memory.global-limit") > 0) { $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.Maxmemorymanager " . TextFormat::RED . number_format(round($server->getProperty("memory.global-limit"), 2)) . " MB."); } foreach ($server->getLevels() as $level) { $sender->sendMessage(TextFormat::GOLD . "%pocketmine.command.status.World \"" . $level->getFolderName() . "\"" . ($level->getFolderName() !== $level->getName() ? " (" . $level->getName() . ")" : "") . ": " . TextFormat::RED . number_format(count($level->getChunks())) . TextFormat::GREEN . " %pocketmine.command.status.chunks " . TextFormat::RED . number_format(count($level->getEntities())) . TextFormat::GREEN . " %pocketmine.command.status.entities " . TextFormat::RED . number_format(count($level->getTiles())) . TextFormat::GREEN . " %pocketmine.command.status.tiles " . "%pocketmine.command.status.Time " . (($level->getTickRate() > 1 or $level->getTickRateTime() > 40) ? TextFormat::RED : TextFormat::YELLOW) . round($level->getTickRateTime(), 2) . "%pocketmine.command.status.ms" . ($level->getTickRate() > 1 ? " (tick rate " . $level->getTickRate() . ")" : "")); } return true; }
public function __construct(Server $server, $type, $playerList = []) { $endpoint = "http://" . $server->getProperty("anonymous-statistics.host", "stats.pocketmine.net") . "/"; $data = []; $data["uniqueServerId"] = $server->getServerUniqueId()->toString(); $data["uniqueMachineId"] = Utils::getMachineUniqueId()->toString(); $data["uniqueRequestId"] = UUID::fromData($server->getServerUniqueId(), microtime(true))->toString(); switch ($type) { case self::TYPE_OPEN: $data["event"] = "open"; $version = new VersionString(); $data["server"] = ["port" => $server->getPort(), "software" => $server->getName(), "fullVersion" => $version->get(true), "version" => $version->get(), "build" => $version->getBuild(), "api" => $server->getApiVersion(), "minecraftVersion" => $server->getVersion(), "protocol" => Info::CURRENT_PROTOCOL]; $data["system"] = ["operatingSystem" => Utils::getOS(), "cores" => Utils::getCoreCount(), "phpVersion" => PHP_VERSION, "machine" => php_uname("a"), "release" => php_uname("r"), "platform" => php_uname("i")]; $data["players"] = ["count" => 0, "limit" => $server->getMaxPlayers()]; $plugins = []; foreach ($server->getPluginManager()->getPlugins() as $p) { $d = $p->getDescription(); $plugins[$d->getName()] = ["name" => $d->getName(), "version" => $d->getVersion(), "enabled" => $p->isEnabled()]; } $data["plugins"] = $plugins; break; case self::TYPE_STATUS: $data["event"] = "status"; $data["server"] = ["ticksPerSecond" => $server->getTicksPerSecondAverage(), "tickUsage" => $server->getTickUsageAverage(), "ticks" => $server->getTick()]; //This anonymizes the user ids so they cannot be reversed to the original foreach ($playerList as $k => $v) { $playerList[$k] = md5($v); } $players = []; foreach ($server->getOnlinePlayers() as $p) { if ($p->isOnline()) { $players[] = md5($p->getUniqueId()->toBinary()); } } $data["players"] = ["count" => count($players), "limit" => $server->getMaxPlayers(), "currentList" => $players, "historyList" => array_values($playerList)]; $info = Utils::getMemoryUsage(true); $data["system"] = ["mainMemory" => $info[0], "totalMemory" => $info[1], "availableMemory" => $info[2], "threadCount" => Utils::getThreadCount()]; break; case self::TYPE_CLOSE: $data["event"] = "close"; $data["crashing"] = $server->isRunning(); break; } $this->endpoint = $endpoint . "api/post"; $this->data = json_encode($data); }
private function titleTick() { if (!Terminal::hasFormattingCodes()) { return; } $d = Utils::getRealMemoryUsage(); $u = Utils::getMemoryUsage(true); $usage = round($u[0] / 1024 / 1024, 2) . "/" . round($d[0] / 1024 / 1024, 2) . "/" . round($u[1] / 1024 / 1024, 2) . "/" . round($u[2] / 1024 / 1024, 2) . " MB @ " . Utils::getThreadCount() . " threads"; echo "]0;" . $this->getName() . " " . $this->getPocketMineVersion() . " | Online " . count($this->players) . "/" . $this->getMaxPlayers() . " | Memory " . $usage . " | U " . round($this->network->getUpload() / 1024, 2) . " D " . round($this->network->getDownload() / 1024, 2) . " kB/s | TPS " . $this->getTicksPerSecond() . " | Load " . $this->getTickUsage() . "%"; $this->network->resetStatistics(); }
/** * Amount of memory already freed * * @return int */ public function getMemoryFreed() { return $this->getMemory() - ($this->isGlobal() ? Utils::getMemoryUsage(\true)[1] : Utils::getMemoryUsage(\true)[0]); }
public function check() { Timings::$memoryManagerTimer->startTiming(); if (($this->memoryLimit > 0 or $this->globalMemoryLimit > 0) and ++$this->checkTicker >= $this->checkRate) { $this->checkTicker = 0; $memory = Utils::getMemoryUsage(true); $trigger = false; if ($this->memoryLimit > 0 and $memory[0] > $this->memoryLimit) { $trigger = 0; } elseif ($this->globalMemoryLimit > 0 and $memory[1] > $this->globalMemoryLimit) { $trigger = 1; } if ($trigger !== false) { if ($this->lowMemory and $this->continuousTrigger) { if (++$this->continuousTriggerTicker >= $this->continuousTriggerRate) { $this->continuousTriggerTicker = 0; $this->trigger($memory[$trigger], $this->memoryLimit, $trigger > 0, ++$this->continuousTriggerCount); } } else { $this->lowMemory = true; $this->continuousTriggerCount = 0; $this->trigger($memory[$trigger], $this->memoryLimit, $trigger > 0); } } else { $this->lowMemory = false; } } if ($this->garbageCollectionPeriod > 0 and ++$this->garbageCollectionTicker >= $this->garbageCollectionPeriod) { $this->garbageCollectionTicker = 0; $this->triggerGarbageCollector(); } Timings::$memoryManagerTimer->stopTiming(); }
/** * @param array &$vars - variables */ public function debugSysVars(&$vars) { $server = $this->getServer(); // Enable debugging variables... $time = floor(microtime(true) - \pocketmine\START_TIME); $uptime = ""; $q = ""; foreach ([["sec", 60, "secs"], ["min", 60, "mins"], ["hour", 24, "hours"], ["day", 0, "days"]] as $f) { if ($f[1]) { $e = floor($time % $f[1]); $time = floor($time / $f[1]); } else { $e = $time; $time = 0; } if ($e) { $r = $e == 1 ? $f[0] : $f[2]; $uptime = $e . " " . $r . $q . $uptime; $q = ", "; } if ($time == 0) { break; } } $vars["{uptime}"] = $uptime; $vars["{netup}"] = round($server->getNetwork()->getUpload() / 1024, 2); $vars["{netdown}"] = round($server->getNetwork()->getUpload() / 1024, 2); $vars["{threads}"] = Utils::getThreadCount(); $mUsage = Utils::getMemoryUsage(true); $vars["{mainmem}"] = number_format(round($mUsage[0] / 1024) / 1024, 2); $vars["{memuse}"] = number_format(round($mUsage[1] / 1024) / 1024, 2); $vars["{maxmem}"] = number_format(round($mUsage[2] / 1024) / 1024, 2); $rUsage = Utils::getRealMemoryUsage(); $vars["{heapmem}"] = number_format(round($rUsage[0] / 1024) / 1024, 2); }
public function updateInfo($user = "") { $data = array("type" => "data", "data" => array("players" => $this->sendPlayers($user), "bans" => $this->sendNameBans(), "ipbans" => $this->sendIPBans(), "ops" => $this->sendOps(), "plugins" => $this->sendPlugins())); $this->getOwner()->thread->jsonStream .= json_encode($data) . "\n"; $u = Utils::getMemoryUsage(true); $d = Utils::getRealMemoryUsage(); $usage = round($u[0] / 1024 / 1024, 2) . "/" . round($d[0] / 1024 / 1024, 2) . "/" . round($u[1] / 1024 / 1024, 2) . "/" . round($u[2] / 1024 / 1024, 2) . " MB @ " . Utils::getThreadCount() . " threads"; $title = "]0;" . $this->getOwner()->getServer()->getName() . " " . $this->getOwner()->getServer()->getPocketMineVersion() . " | Online " . count($this->getOwner()->getServer()->getOnlinePlayers()) . "/" . $this->getOwner()->getServer()->getMaxPlayers() . " | Memory " . $usage . " | U " . round($this->getOwner()->getServer()->getNetwork()->getUpload() / 1024, 2) . " D " . round($this->getOwner()->getServer()->getNetwork()->getDownload() / 1024, 2) . " kB/s | TPS " . $this->getOwner()->getServer()->getTicksPerSecond() . " | Load " . $this->getOwner()->getServer()->getTickUsage() . "%"; $this->getOwner()->thread->stuffTitle = $title; return true; }
private function titleTick() { if (!Terminal::hasFormattingCodes()) { return; } if ($this->getProperty("I/O.title-usage", true)) { $d = Utils::getRealMemoryUsage(); $u = Utils::getMemoryUsage(true); $usage = sprintf("%g/%g/%g/%g MB @ %d threads", round($u[0] / 1024 / 1024, 2), round($d[0] / 1024 / 1024, 2), round($u[1] / 1024 / 1024, 2), round($u[2] / 1024 / 1024, 2), Utils::getThreadCount()); echo "]0;" . $this->getName() . " " . $this->getPocketMineVersion() . '-#' . $this->getPocketMineBuild() . " | Online " . count($this->players) . "/" . $this->getMaxPlayers() . " | Memory " . $usage . " | U " . round($this->network->getUpload() / 1024, 2) . " D " . round($this->network->getDownload() / 1024, 2) . " kB/s | TPS " . $this->getTicksPerSecondAverage() . " | Load " . $this->getTickUsageAverage() . "%"; } $this->network->resetStatistics(); }