mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 06:20:56 +01:00
Provide more information about cache sizing in cache diagnostics
Summary: Ref T5501. This expands cache information a little more. Test Plan: {F362975} Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T5501 Differential Revision: https://secure.phabricator.com/D12316
This commit is contained in:
parent
0880788bd4
commit
c5d38c6e08
5 changed files with 89 additions and 2 deletions
|
@ -7,6 +7,10 @@ abstract class PhabricatorCacheSpec extends Phobject {
|
|||
private $version;
|
||||
private $issues = array();
|
||||
|
||||
private $usedMemory = 0;
|
||||
private $totalMemory = 0;
|
||||
private $entryCount = null;
|
||||
|
||||
public function setName($name) {
|
||||
$this->name = $name;
|
||||
return $this;
|
||||
|
@ -50,4 +54,33 @@ abstract class PhabricatorCacheSpec extends Phobject {
|
|||
return $this->issues;
|
||||
}
|
||||
|
||||
public function setUsedMemory($used_memory) {
|
||||
$this->usedMemory = $used_memory;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getUsedMemory() {
|
||||
return $this->usedMemory;
|
||||
}
|
||||
|
||||
public function setTotalMemory($total_memory) {
|
||||
$this->totalMemory = $total_memory;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTotalMemory() {
|
||||
return $this->totalMemory;
|
||||
}
|
||||
|
||||
public function setEntryCount($entry_count) {
|
||||
$this->entryCount = $entry_count;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getEntryCount() {
|
||||
return $this->entryCount;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ final class PhabricatorDataCacheSpec extends PhabricatorCacheSpec {
|
|||
|
||||
if (ini_get('apc.enabled')) {
|
||||
$spec->setIsEnabled(true);
|
||||
self::getAPCCommonSpec($spec);
|
||||
} else {
|
||||
$spec->setIsEnabled(false);
|
||||
$spec->newIssue(
|
||||
|
@ -41,6 +42,7 @@ final class PhabricatorDataCacheSpec extends PhabricatorCacheSpec {
|
|||
|
||||
if (ini_get('apc.enabled')) {
|
||||
$spec->setIsEnabled(true);
|
||||
self::getAPCCommonSpec($spec);
|
||||
} else {
|
||||
$spec->setIsEnabled(false);
|
||||
$spec->newissue(
|
||||
|
@ -70,4 +72,13 @@ final class PhabricatorDataCacheSpec extends PhabricatorCacheSpec {
|
|||
return $spec;
|
||||
}
|
||||
|
||||
private static function getAPCCommonSpec(PhabricatorDataCacheSpec $spec) {
|
||||
$mem = apc_sma_info();
|
||||
$spec->setTotalMemory($mem['num_seg'] * $mem['seg_size']);
|
||||
|
||||
$info = apc_cache_info('user');
|
||||
$spec->setUsedMemory($info['mem_size']);
|
||||
$spec->setEntryCount(count($info['cache_list']));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,12 @@ final class PhabricatorOpcodeCacheSpec extends PhabricatorCacheSpec {
|
|||
|
||||
if (ini_get('apc.enabled')) {
|
||||
$spec->setIsEnabled(true);
|
||||
|
||||
$mem = apc_sma_info();
|
||||
$spec->setTotalMemory($mem['num_seg'] * $mem['seg_size']);
|
||||
|
||||
$info = apc_cache_info();
|
||||
$spec->setUsedMemory($info['mem_size']);
|
||||
} else {
|
||||
$spec->setIsEnabled(false);
|
||||
$spec->newIssue(
|
||||
|
@ -41,6 +47,16 @@ final class PhabricatorOpcodeCacheSpec extends PhabricatorCacheSpec {
|
|||
|
||||
if (ini_get('opcache.enable')) {
|
||||
$spec->setIsEnabled(true);
|
||||
|
||||
$status = opcache_get_status();
|
||||
$memory = $status['memory_usage'];
|
||||
|
||||
$mem_used = $memory['used_memory'];
|
||||
$mem_free = $memory['free_memory'];
|
||||
$mem_junk = $memory['wasted_memory'];
|
||||
$spec->setUsedMemory($mem_used + $mem_junk);
|
||||
$spec->setTotalMemory($mem_used + $mem_junk + $mem_free);
|
||||
$spec->setEntryCount($status['opcache_statistics']['num_cached_keys']);
|
||||
} else {
|
||||
$spec->setIsEnabled(false);
|
||||
$spec->newissue(
|
||||
|
|
|
@ -40,10 +40,11 @@ final class PhabricatorAPCSetupCheck extends PhabricatorSetupCheck {
|
|||
}
|
||||
|
||||
$is_dev = PhabricatorEnv::getEnvConfig('phabricator.developer-mode');
|
||||
$is_apcu = extension_loaded('apcu');
|
||||
$is_stat_enabled = ini_get('apc.stat');
|
||||
|
||||
$issue_key = null;
|
||||
if ($is_stat_enabled && !$is_dev) {
|
||||
if ($is_stat_enabled && !$is_dev && !$is_apcu) {
|
||||
$issue_key = 'extension.apc.stat-enabled';
|
||||
$short = pht("'apc.stat' Enabled");
|
||||
$long = pht("'apc.stat' Enabled in Production");
|
||||
|
@ -56,7 +57,7 @@ final class PhabricatorAPCSetupCheck extends PhabricatorSetupCheck {
|
|||
"updates safer (PHP won't read in the middle of a 'git pull').\n\n".
|
||||
"(If you are developing for Phabricator, leave 'apc.stat' enabled but ".
|
||||
"enable 'phabricator.developer-mode'.)");
|
||||
} else if (!$is_stat_enabled && $is_dev) {
|
||||
} else if (!$is_stat_enabled && $is_dev && !$is_apcu) {
|
||||
$issue_key = 'extension.apc.stat-disabled';
|
||||
$short = pht("'apc.stat' Disabled");
|
||||
$long = pht("'apc.stat' Disabled in Development");
|
||||
|
|
|
@ -79,6 +79,32 @@ final class PhabricatorConfigCacheController
|
|||
if ($version) {
|
||||
$properties->addProperty(pht('Version'), $this->renderInfo($version));
|
||||
}
|
||||
|
||||
if ($cache->getName() === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
$mem_total = $cache->getTotalMemory();
|
||||
$mem_used = $cache->getUsedMemory();
|
||||
|
||||
if ($mem_total) {
|
||||
$percent = 100 * ($mem_used / $mem_total);
|
||||
|
||||
$properties->addProperty(
|
||||
pht('Memory Usage'),
|
||||
pht(
|
||||
'%s of %s',
|
||||
phutil_tag('strong', array(), sprintf('%.1f%%', $percent)),
|
||||
phutil_format_bytes($mem_total)));
|
||||
}
|
||||
|
||||
$entry_count = $cache->getEntryCount();
|
||||
if ($entry_count !== null) {
|
||||
$properties->addProperty(
|
||||
pht('Cache Entries'),
|
||||
pht('%s', new PhutilNumber($entry_count)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function renderIssues(array $issues) {
|
||||
|
|
Loading…
Reference in a new issue