-
Notifications
You must be signed in to change notification settings - Fork 469
/
Copy pathMemoryConsumptionChecker.php
65 lines (58 loc) · 1.79 KB
/
MemoryConsumptionChecker.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace OldSound\RabbitMqBundle\MemoryChecker;
/**
* Help handling memory limits .
*
* @author Jonas Haouzi <jonas@viscaweb.com>
*/
class MemoryConsumptionChecker
{
/** @var NativeMemoryUsageProvider */
private $memoryUsageProvider;
/**
* MemoryManager constructor.
*
* @param NativeMemoryUsageProvider $memoryUsageProvider
*/
public function __construct(NativeMemoryUsageProvider $memoryUsageProvider)
{
$this->memoryUsageProvider = $memoryUsageProvider;
}
/**
* @param int|string $allowedConsumptionUntil
* @param int|string $maxConsumptionAllowed
*
* @return bool
*/
public function isRamAlmostOverloaded($maxConsumptionAllowed, $allowedConsumptionUntil = 0)
{
$allowedConsumptionUntil = $this->convertHumanUnitToNumerical($allowedConsumptionUntil);
$maxConsumptionAllowed = $this->convertHumanUnitToNumerical($maxConsumptionAllowed);
$currentUsage = $this->convertHumanUnitToNumerical($this->memoryUsageProvider->getMemoryUsage());
return $currentUsage > ($maxConsumptionAllowed - $allowedConsumptionUntil);
}
/**
* @param int|string $humanUnit
*
* @return int
*/
private function convertHumanUnitToNumerical($humanUnit)
{
$numerical = $humanUnit;
if (!is_numeric($humanUnit)) {
$numerical = (int) substr($numerical, 0, -1);
switch (substr($humanUnit, -1)) {
case 'G':
$numerical *= pow(1024, 3);
break;
case 'M':
$numerical *= pow(1024, 2);
break;
case 'K':
$numerical *= 1024;
break;
}
}
return (int)$numerical;
}
}