Řešili jste někdy co vlastně znamenají 3 čísla na konci příkazu uptime?
load average: 0,10, 0,09, 0,11

Tyto čísla obecně vyjadřují průměrné zatížení linuxového systemu za období 1, 5 a 15 minut a nezahrnují žádné procesy, čekajicí doby i/o wait na discích nebo síti.
Zjednodušeně se dá říct, že tato čísla zobrazují zatížení, vlivem zatížení CPU procesy, nikoliv tedy jen zatížení přímo CPU. To znamená, že zvyšujicí se zatížení poukazuje pouze na to, že nějaký proces čeká na dokončení předchozího procesu aby mu mohl být přidělen procesorový čas daného procesoru a přitom procesory nemusí vykazovat vůbec vytížení (například u příkazu htop).
Tento jev je nejčastěji způsoben právě dlouhou čekajicí dobou na přístup k disku, přístupu k síťovému rozhraní a nebo jsou prostě jen zatíženy procesory.

Load 3.00 u jedno-jádrového procesoru znamená 300% zatížení systému, u dvou-jádrového procesoru lze předpokládat, že toto zatížení v ideálním případě by bylo poloviční tedy 1.50.
Pokud tedy máme číslo zatížení rovno počtu CPU, můžeme předpokládat, že hardware je v tomto okamžiku na hraně své optimální schopnosti odbavovat procesy v obvyklých časech a nenastává tak rapidní zpomalení systému (můžeme pozorovat při velkém swapování na pomalý disk kdy se zvedne i/o wait time). Lze tedy říci, že v tuto chvíli systém využil svých procesorů „naplno“ a efektivně, ale pokuď takové zatížení je trvalé chtělo by to zvážit posílení hardwaru případně přerozdělení zátěže mezi více serverů.

S těmito informacemi lze napsat skript který průměrný load přepočítá na procenta – (LOAD / POČET CPU) * 100. Pro ukázku přikládám funkční php skript pro linux (Ve windows jsem nenašel alternativu průměrného zatížení za časový usek, pouze okamžité zatížení CPU pomocí php rozšíření COM)

$numcores = 8; //Počet jader CPU
$sys_load = sys_getloadavg(); //Nativni PHP funkce pro linux
$percent = ($sys_load[0] / $numcores) * 100; //Prepocet na procenta, vybereme hodnotu za posledni minutu
 
print sprintf("%0.1f",$percent) . "%".PHP_EOL; //Vypis se zaokrouhlenim na 1 desetinne misto

Řesili jste někdy otázku, jak změřit rychlost na linuxovém serveru bez GUI ? Dříve jsem to řesil stahováním 1GB souboru, ale to se pro větší rychlosti nehodí hlavně kvůli nedostatečné šírce pásma cílového serveru, tudíž přesné změření rychlosti nepřipadá v úvahu.
Proto jsem hledal dál rychlostní test z autorizovaného serveru, který je pro tyto účely určen. Po chvilce hledání jsem narazil na pythoní skript speedtest pro command line, který změří to samé co klasický speedtest.net (odezvu – ping, download – rychlost stahování, upload – rychlost odesílání).

Základní použití:

wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
python speedtest-cli.py

Výstup:

Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from JON.CZ s.r.o. (188.75.174.173)...
Selecting best server based on ping...
Hosted by Vodafone CZ (Prague) [41.06 km]: 55.631 ms
Testing download speed........................................
Download: 25.77 Mbit/s
Testing upload speed..................................................
Upload: 34.49 Mbit/s
root@mail:~# python speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from JON.CZ s.r.o. (188.75.174.173)...
Selecting best server based on ping...
Hosted by Vodafone CZ (Prague) [41.06 km]: 52.611 ms
Testing download speed........................................
Download: 25.91 Mbit/s
Testing upload speed..................................................
Upload: 34.49 Mbit/s

Nápověda – použití:

$ speedtest-cli -h
usage: speedtest-cli [-h] [--share] [--simple] [--list] [--server SERVER]
                     [--mini MINI] [--source SOURCE] [--version]
 
Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli
 
optional arguments:
  -h, --help       show this help message and exit
  --share          Generate and provide a URL to the speedtest.net share
                   results image
  --simple         Suppress verbose output, only show basic information
  --list           Display a list of speedtest.net servers sorted by distance
  --server SERVER  Specify a server ID to test against
  --mini MINI      URL of the Speedtest Mini server
  --source SOURCE  Source IP address to bind to
  --version        Show the version number and exit

Ukázka:

lGyGlbI[1]

Před časem jsem řešil jak na ping nezavisle na platforme. Ano vím že linux mac i windows maji nativní ping ale liší se paremetry a ne vždy jde využít na každém hostingu.
Proto jsem hledal alternativu která využívá socket.

function ping($host, $timeout = 1) {
  /* ICMP ping packet with a pre-calculated checksum */
  $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
  $socket  = socket_create(AF_INET, SOCK_RAW, 1);
  socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
  socket_connect($socket, $host, null);
  $ts = microtime(true);
  socket_send($socket, $package, strLen($package), 0);
  if (socket_read($socket, 255)) {
    $result = microtime(true) - $ts;
  } else {
    $result = false;
  }
  socket_close($socket);
  if ($result)
    return round(($result * 1000), 0)." ms".PHP_EOL;;
  else
    return "down".PHP_EOL;
}
 
for ($a = 0;$a < 10000 ;$a++ ) {
  print ping( "seznam.cz" );
}
Vloženo PHP.