Quantcast
Channel: Microsoft Drivers for PHP for SQL Server forum
Viewing all articles
Browse latest Browse all 391

memory leak with php and sqlsrv

$
0
0
Hi,

I encountered a problem with a memory leak using Microsoft Windows Server 2008 R2, IIS/FastCGI, sqlsrv 2.0.182 and php 5.2.17 (php_sqlsrv_52_ts_vc6.dll) / php 5.3.8 (php_sqlsrv_53_nts_vc9.dll).

Please have a look at the test script appended and the results it produces. Freeing the statement or closing and reopening the connection did not make a difference in my tests.

Running the same script with mysqli does not show the effect of constantly increasing memory usage.

Any help would be appreciated.

Best regards
Lars Teuber


<?php

$db_conn = get_db_conn_sqlsrv();
#$db_conn = get_db_conn_mysqli();

$query = "SELECT 1 AS dummy"; // FROM DUAL
$seconds = 10; //60 * 60;

echo '<br>php version: [' . phpversion() . ']';
echo '<br>sapi name: [' . php_sapi_name() . ']';
echo '<br>runtime: [' . $seconds . 's]';
echo '<br>memory_get_usage start: [' . memory_get_usage() . ']';
echo '<br>memory usage by tasklist start: [' . memory_get_usage_by_tasklist() . ']';

$start_time = time();
while (time() - $start_time < $seconds) {
    db_query_sqlsrv($db_conn, $query);
    #db_query_mysqli($db_conn, $query);
}

echo '<br>memory_get_usage end: [' . memory_get_usage() . ']';
echo '<br>memory_get_peak_usage: [' . memory_get_peak_usage() . ']';
echo '<br>memory_get_peak_usage real: [' . memory_get_peak_usage(true) . ']';
echo '<br>memory usage by tasklist end: [' . memory_get_usage_by_tasklist() . ']';

function db_query_sqlsrv($conn, $query)
{
    $res = sqlsrv_query($conn, $query);
    if (!$res) {
        throw new Exception('query failed');
    }

    #sqlsrv_free_stmt($res);
    #sqlsrv_close($conn);
}

function db_query_mysqli($conn, $query)
{
    $query_id = mysqli_query($conn, $query);
    if (!$query_id) {
        throw new Exception('Invalid SQL: ' . $query);
    }
}

function get_db_conn_sqlsrv()
{
    $host = "xxx,1234";
    $conn_info = array(
        'Database'                  => 'db_name',
        'MultipleActiveResultSets'  => true,
        'CharacterSet'              => 'UTF-8',
        'UID'                       => 'uid',
        'PWD'                       => 'pwd'
        );

    sqlsrv_configure('WarningsReturnAsErrors', 0);
    $conn = sqlsrv_connect($host, $conn_info);
    if (!$conn) {
        throw new Exception('no link');
    }

    return $conn;
}

function get_db_conn_mysqli()
{
    $host = 'xxx';
    $user = 'user';
    $pass = 'pwd';
    $port = '1234';
    $database = 'db';

    $link_id = mysqli_connect($host, $user, $pass, '', $port);

    if (!$link_id) {
        throw new Exception('no connection');
    }

    if (!mysqli_select_db($link_id, $database)) {
        throw new Exception('cannot use database');
    }

    return $link_id;
}

// = "working set memory" in taskmgr (windows server 2008r2)
function memory_get_usage_by_tasklist()
{
    if (!is_windows()) {
        return 'n/a';
    }

    $output = array();
    exec('tasklist ', $output);
    foreach ($output as $value) {
        $ex = explode(" ", $value);
        $count_ex = count($ex);
        if (preg_match('/ ' . getmypid() . ' Services/', $value)) {
            $memory_size = $ex[$count_ex - 2] . ' Kb';
            return $memory_size;
        }
    }
}

function is_windows()
{
    return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
}

?>

-->

sqlsrv
------

php version: [5.2.17]
sapi name: [cgi-fcgi]
runtime: [60s]
memory_get_usage start: [94384]
memory usage by tasklist start: [16.028 Kb]
memory_get_usage end: [93072]
memory_get_peak_usage: [125696]
memory_get_peak_usage real: [262144]
memory usage by tasklist end: [29.392 Kb]

php version: [5.2.17]
sapi name: [cgi-fcgi]
runtime: [3600s]
memory_get_usage start: [91384]
memory usage by tasklist start: [14.768 Kb]
memory_get_usage end: [89904]
memory_get_peak_usage: [123424]
memory_get_peak_usage real: [262144]
memory usage by tasklist end: [262.692 Kb]

php version: [5.3.8]
sapi name: [cgi-fcgi]
runtime: [3600s]
memory_get_usage start: [326688]
memory usage by tasklist start: [14.760 Kb]
memory_get_usage end: [325128]
memory_get_peak_usage: [359304]
memory_get_peak_usage real: [524288]
memory usage by tasklist end: [618.376 Kb]

Viewing all articles
Browse latest Browse all 391

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>