php - remove - strip_tags wordpress
Cómo hacer una prueba de php/mysql site (7)
Me gustaría saber cómo comparar un sitio php / mysql.
Tenemos una aplicación web casi terminada y lista para funcionar, sabemos cuánta gente la va a usar en un año, pero no tenemos la menor idea de cuánto ancho de banda toma el usuario promedio, ni de cuánto tiempo se queman en Base de datos, etc. Necesitamos determinar los servidores correctos para comprar.
¿Hay algo en el lado del servidor de Linux que pueda monitorear estas estadísticas por usuario? ¿Para que podamos tomar estos datos y extrapolarlos?
Si estoy haciendo esto completamente mal, por favor avíseme, pero creo que esta es una actividad frecuente para las nuevas aplicaciones web.
EDITAR: Es posible que haya pedido la información incorrecta. Podemos ver cuánto demoran las consultas de la base de datos y cuánto tarda en cargar la página, pero no tenemos idea de qué carga se coloca en el servidor. La pregunta que hago es si podemos manejar 100 usuarios a la vez en promedio ... ¿1000? ¿Qué tipo de requisitos de servidor son necesarios para golpear a 1M usuarios? Etc.
Gracias por tu ayuda.
A menos que esté utilizando un marco de trabajo pesado o algo así , es probable que las consultas de base de datos sean la parte más lenta de su aplicación.
Lo que hago para monitorear es medir el tiempo de ejecución para cada consulta en mi objeto de abstracción de base de datos. Luego, para cada consulta que demore más de X milisegundos (complete su propia X), escribo una línea en el archivo de registro de mi consulta que identifica el archivo de script PHP y el número de línea en la que apareció la consulta (use debug_backtrace()
para encontrar eso información) junto con otros datos de contexto relevantes (por ejemplo, identidad del usuario, fecha y hora, etc.).
Este archivo de registro se puede analizar estadísticamente más adelante para obtener información diversa.
Por ejemplo, puede encontrar cuál de sus consultas está tomando el mayor tiempo total (relevante para la carga del servidor). O cuáles son las más lentas (relevantes para la experiencia del usuario). O qué usuario está cargando el sistema más (posiblemente, abuso o robots).
También trazo los gráficos de Pareto para identificar dónde gastar mejor mis esfuerzos de optimización de consultas.
Lo más importante es que necesita definir cuál desea que sea el rendimiento: siempre puede encontrar áreas para optimizar. Sin embargo, mejorar el tiempo de respuesta de 750 ms a 650 ms puede que no valga la pena.
Como dijo fsb, sus cuellos de botella probablemente serán las consultas de su base de datos. Sin embargo, también estipularía que sus cuellos de botella no son siempre (o incluso probable) donde cree que están. Sugeriría leer this primero y hacer una prueba global de su sitio.
Si es su aplicación, use xdebug para perfilar su código PHP. Luego use WinCacheGrind o KCacheGrind para analizar la salida. Esto puede sorprenderte.
Para abordar los problemas de la base de datos, es bastante específico de la base de datos. Para MySQL, enciendo el registro de consultas lentas, registro las consultas que no usan índices, habilito el registro de consultas y uso kits de herramientas como Maatkit para analizar las consultas y encontrar los cuellos de botella.
No tengo ninguna experiencia con herramientas de evaluación comparativa, pero en algunos casos creo una tabla simple con los campos id
, parsetime
, parsetime
, queries
. Simplemente inserte una nueva fila cada vez que una página se actualice o se llame (en situaciones ajax). Luego analice los datos recolectados en una semana / mes / trimestre / año. No es su situación preferida, sino una forma sencilla de obtener estadísticas con poca antelación.
Algunos resultados en los puntos de referencia de PHP: http://www.google.nl/search?hl=nl&source=hp&q=php+benchmark&meta=&aq=f&oq=
Prueba esto:
<?php
/**
* Created by PhpStorm.
* User: NEO
* Date: 9/18/2016
* Time: 10:57 AM
*/
/**
* PHP Script to benchmark PHP and MySQL-Server
*
* inspired by / thanks to:
* - www.php-benchmark-script.com (Alessandro Torrisi)
* - www.webdesign-informatik.de
*
* @author odan
* @license MIT
*/
// -----------------------------------------------------------------------------
// Setup
// -----------------------------------------------------------------------------
set_time_limit(120); // 2 minutes
$options = array();
// Optional: mysql performance test
$options[''db.host''] = ''127.0.0.1'';
$options[''db.user''] = ''root'';
$options[''db.pw''] = '''';
$options[''db.name''] = ''bache3'';
// -----------------------------------------------------------------------------
// Main
// -----------------------------------------------------------------------------
// check performance
$benchmarkResult = test_benchmark($options);
// html output
echo "<!DOCTYPE html>/n<html><head>/n";
echo "<style>
table {
color: #333; /* Lighten up font color */
font-family: Helvetica, Arial, sans-serif; /* Nicer font */
width: 640px;
border-collapse:
collapse; border-spacing: 0;
}
td, th {
border: 1px solid #CCC; height: 30px;
} /* Make cells a bit taller */
th {
background: #F3F3F3; /* Light grey background */
font-weight: bold; /* Make sure they''re bold */
}
td {
background: #FAFAFA; /* Lighter grey background */
}
</style>
</head>
<body>";
echo array_to_html($benchmarkResult);
echo "/n</body></html>";
exit;
// -----------------------------------------------------------------------------
// Benchmark functions
// -----------------------------------------------------------------------------
function test_benchmark($settings)
{
$timeStart = microtime(true);
$result = array();
$result[''version''] = ''1.1'';
$result[''sysinfo''][''time''] = date("Y-m-d H:i:s");
$result[''sysinfo''][''php_version''] = PHP_VERSION;
$result[''sysinfo''][''platform''] = PHP_OS;
$result[''sysinfo''][''server_name''] = $_SERVER[''SERVER_NAME''];
$result[''sysinfo''][''server_addr''] = $_SERVER[''SERVER_ADDR''];
test_math($result);
test_string($result);
test_loops($result);
test_ifelse($result);
if (isset($settings[''db.host''])) {
test_mysql($result, $settings);
}
$result[''total''] = timer_diff($timeStart);
return $result;
}
function test_math(&$result, $count = 99999)
{
$timeStart = microtime(true);
$mathFunctions = array("abs", "acos", "asin", "atan", "bindec", "floor", "exp", "sin", "tan", "pi", "is_finite", "is_nan", "sqrt");
for ($i = 0; $i < $count; $i++) {
foreach ($mathFunctions as $function) {
call_user_func_array($function, array($i));
}
}
$result[''benchmark''][''math''] = timer_diff($timeStart);
}
function test_string(&$result, $count = 99999)
{
$timeStart = microtime(true);
$stringFunctions = array("addslashes", "chunk_split", "metaphone", "strip_tags", "md5", "sha1", "strtoupper", "strtolower", "strrev", "strlen", "soundex", "ord");
$string = ''the quick brown fox jumps over the lazy dog'';
for ($i = 0; $i < $count; $i++) {
foreach ($stringFunctions as $function) {
call_user_func_array($function, array($string));
}
}
$result[''benchmark''][''string''] = timer_diff($timeStart);
}
function test_loops(&$result, $count = 999999)
{
$timeStart = microtime(true);
for ($i = 0; $i < $count; ++$i) {
}
$i = 0;
while ($i < $count) {
++$i;
}
$result[''benchmark''][''loops''] = timer_diff($timeStart);
}
function test_ifelse(&$result, $count = 999999)
{
$timeStart = microtime(true);
for ($i = 0; $i < $count; $i++) {
if ($i == -1) {
} elseif ($i == -2) {
} else if ($i == -3) {
}
}
$result[''benchmark''][''ifelse''] = timer_diff($timeStart);
}
function test_mysql(&$result, $settings)
{
$timeStart = microtime(true);
$link = mysqli_connect($settings[''db.host''], $settings[''db.user''], $settings[''db.pw'']);
$result[''benchmark''][''mysql''][''connect''] = timer_diff($timeStart);
//$arr_return[''sysinfo''][''mysql_version''] = '''';
mysqli_select_db($link, $settings[''db.name'']);
$result[''benchmark''][''mysql''][''select_db''] = timer_diff($timeStart);
$dbResult = mysqli_query($link, ''SELECT VERSION() as version;'');
$arr_row = mysqli_fetch_array($dbResult);
$result[''sysinfo''][''mysql_version''] = $arr_row[''version''];
$result[''benchmark''][''mysql''][''query_version''] = timer_diff($timeStart);
$query = "SELECT BENCHMARK(1000000,ENCODE(''hello'',RAND()));";
$dbResult = mysqli_query($link, $query);
$result[''benchmark''][''mysql''][''query_benchmark''] = timer_diff($timeStart);
mysqli_close($link);
$result[''benchmark''][''mysql''][''total''] = timer_diff($timeStart);
return $result;
}
function timer_diff($timeStart)
{
return number_format(microtime(true) - $timeStart, 3);
}
function array_to_html($array)
{
$result = '''';
if (is_array($array)) {
$result .= ''<table>'';
foreach ($array as $k => $v) {
$result .= "/n<tr><td>";
$result .= ''<strong>'' . htmlentities($k) . "</strong></td><td>";
$result .= array_to_html($v);
$result .= "</td></tr>";
}
$result .= "/n</table>";
} else {
$result = htmlentities($array);
}
return $result;
}
Puede usar la herramienta ApacheBench (ab, generalmente una parte del paquete de apache web-server) para realizar pruebas de estrés (1k solicitudes con 10 clientes = ab -c 10 -n 1000 http: // url ) del script, que sospecha que podrían estar lo suficientemente lento Le mostrará la distribución de los tiempos de respuesta (en el 90% de los casos, la solicitud se procesó en menos de 200 ms).
También puede capturar consultas SQL ejecutadas por ese script en particular y hacer un "plan explicativo" para que tengan una idea aproximada de cómo se degradará cuando haya entre 10-100-10ml veces más registros en las tablas.
Con respecto a la cantidad de usuarios que puede servir, puede usar su navegador favorito y emular una visita típica de un usuario, tomar el archivo access_log y sumar los bytes enviados (uno de los últimos números en la línea de registro). Por ejemplo, fue 5kb text / html + 50kb png / jpg / etc. = 55kb por visita del usuario. Más encabezados / etc digamos 60kb por visita * 1m = 60 gb de tráfico por día. ¿Es tu ancho de banda lo suficientemente bueno para eso? (60 gb / 86.4ksec = 700kb / seg).
Recientemente he desarrollado un componente PHP para probar fácilmente y crear un informe para su prueba de referencia. También publiqué un artículo sobre la importancia de las pruebas de referencia, donde indico la importancia de las pruebas debido a la tensión que las pruebas pueden causar en su servidor web. Las pruebas de referencia son extremadamente importantes, pero creo que en esta época la gente tiende a olvidarse de eso, cuando en realidad debería estar en la parte superior de la lista de verificación. Comprobación de errores, comprobación de seguridad y, a continuación, pruebas de referencia.
En ese orden.
http://www.binpress.com/app/benchmark-testing-framework/534?ad=1229 - El marco que he desarrollado http://www.binpress.com/blog/2011/08/04/the-important-of-benchmark-testing/?ad=1229 - El artículo que escribí
Una herramienta que me parece bastante útil es jmeter que le permite (en su forma más básica) configurar su navegador para que use jmeter como un proxy, luego se pasea por su sitio web y registra todo lo que hace.
Una vez que esté satisfecho de que es una prueba decente de la mayoría de su sitio web, puede guardar la prueba en jmeter y decirle que ejecute la prueba con un número establecido de subprocesos y un número de bucles por subproceso para simular la carga en su sitio web.
Por ejemplo, puede ejecutar 50 clientes cada uno ejecutando el plan de prueba 10 veces.
Luego, puede aumentar o disminuir los números para ver el impacto en el rendimiento que tiene en el sitio, grafica el tiempo de respuesta para usted.
Esto le permite ajustar diferentes parámetros, probar diferentes estrategias de almacenamiento en caché y verificar el impacto real de esos cambios.