summaryrefslogtreecommitdiff
path: root/ext/opcache
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-21 12:43:42 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-21 12:43:42 +0400
commit851f36288299ff3dc4f8ff6d0fd9e5f56211d583 (patch)
tree5f1a5ff826f8992af81c79aa72955fc48ee4af8e /ext/opcache
parentf06b3432c80e5c40678a9314d97da220d5cfd678 (diff)
downloadphp-git-851f36288299ff3dc4f8ff6d0fd9e5f56211d583.tar.gz
Added information about interned strings usage
Diffstat (limited to 'ext/opcache')
-rw-r--r--ext/opcache/ZendAccelerator.c1
-rw-r--r--ext/opcache/zend_accelerator_module.c22
2 files changed, 23 insertions, 0 deletions
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index d174f2a42f..44064004f8 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -338,6 +338,7 @@ const char *accel_new_interned_string(const char *arKey, int nKeyLength, int fre
if (ZCSG(interned_strings_top) + ZEND_MM_ALIGNED_SIZE(sizeof(Bucket) + nKeyLength) >=
ZCSG(interned_strings_end)) {
/* no memory, return the same non-interned string */
+ zend_accel_error(ACCEL_LOG_WARNING, "Interned string buffer overflow");
return arKey;
}
diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c
index b15c080c40..9d7a5a93f5 100644
--- a/ext/opcache/zend_accelerator_module.c
+++ b/ext/opcache/zend_accelerator_module.c
@@ -444,6 +444,14 @@ void zend_accel_info(ZEND_MODULE_INFO_FUNC_ARGS)
php_info_print_table_row(2, "Free memory", buf);
snprintf(buf, sizeof(buf), "%ld", ZSMMG(wasted_shared_memory));
php_info_print_table_row(2, "Wasted memory", buf);
+#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+ if (ZCSG(interned_strings_start) && ZCSG(interned_strings_end) && ZCSG(interned_strings_top)) {
+ snprintf(buf, sizeof(buf), "%ld", ZCSG(interned_strings_top) - ZCSG(interned_strings_start));
+ php_info_print_table_row(2, "Interned Strings Used memory", buf);
+ snprintf(buf, sizeof(buf), "%ld", ZCSG(interned_strings_end) - ZCSG(interned_strings_top));
+ php_info_print_table_row(2, "Interned Strings Free memory", buf);
+ }
+#endif
snprintf(buf, sizeof(buf), "%ld", ZCSG(hash).num_direct_entries);
php_info_print_table_row(2, "Cached scripts", buf);
snprintf(buf, sizeof(buf), "%ld", ZCSG(hash).num_entries);
@@ -573,6 +581,20 @@ static ZEND_FUNCTION(opcache_get_status)
add_assoc_double(memory_usage, "current_wasted_percentage", (((double) ZSMMG(wasted_shared_memory))/ZCG(accel_directives).memory_consumption)*100.0);
add_assoc_zval(return_value, "memory_usage", memory_usage);
+#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+ if (ZCSG(interned_strings_start) && ZCSG(interned_strings_end) && ZCSG(interned_strings_top)) {
+ zval *interned_strings_usage;
+
+ MAKE_STD_ZVAL(interned_strings_usage);
+ array_init(interned_strings_usage);
+ add_assoc_long(interned_strings_usage, "buffer_size", ZCSG(interned_strings_end) - ZCSG(interned_strings_start));
+ add_assoc_long(interned_strings_usage, "used_memory", ZCSG(interned_strings_top) - ZCSG(interned_strings_start));
+ add_assoc_long(interned_strings_usage, "free_memory", ZCSG(interned_strings_end) - ZCSG(interned_strings_top));
+ add_assoc_long(interned_strings_usage, "number_of_strings", ZCSG(interned_strings).nNumOfElements);
+ add_assoc_zval(return_value, "interned_strings_usage", interned_strings_usage);
+ }
+#endif
+
/* Accelerator statistics */
MAKE_STD_ZVAL(statistics);
array_init(statistics);