У меня есть PHP, работающий на Ubuntu с Apache. У меня есть простой скрипт, который просто выполняет запрос, чтобы вытащить кучу широт, пар долготы из базы данных, хранит их в массиве, а эхо - из JSON.PHP-скрипт с использованием более 512 МБ при обработке только нескольких массивов MB
Массивность составляет около 40 000 элементов. Запись в массив выглядит следующим образом
{"lat":"41.951234015","lng":"-87.5317308"}.
Этот запрос к БД MySQL через MSSQL БД с помощью связанного сервера, если это имеет отношение вообще.
PHP заканчивается на память, если я делаю ini_set('memory_limit', '512M')
, но удался, если я сделаю ini_set('memory_limit', '1024M')
.
Почему этот сценарий занимает столько памяти? Массив из 40 000 элементов, каждый из которых содержит не более 20 символов, должен занимать всего несколько МБ памяти. Я не делаю ЛЮБОЙ обработки массива.
EDIT: Вот мой код
mssql_query("SET ANSI_WARNINGS ON");
mssql_query("SET ANSI_NULLS ON");
ini_set('memory_limit', '1024M');
$cbsa='16980';
if(isset($_POST['cbsa'])){
$cbsa = sanitize($_POST['cbsa']);
}
$zipstrings = get_zipstring($cbsa); //external function that returns two lists of about 500 zipcodes each
$lat_lng = array();
foreach($zipstrings as $zipstring){
$result = mssql_query("select * from openquery(database, 'SELECT lat, lng from coordinates
JOIN with other table....");
while($row = mssql_fetch_array($result, MSSQL_ASSOC)){
$lat_lng[] = array("lat"=>$row['lat'], "lng"=>$row['lng']); **CRASHES HERE**
}
}
echo json_encode(array("coords"=>$lat_lng, "error"=>mssql_get_last_message()));
Мы не можем искать утечки памяти в вашем коде кодом – user20232359723568423357842364
... –
@ user20232359723568423357842364 Почему бы вам не изменить свое имя пользователя LOL. Скотт W: Можете ли вы разместить свой код? У вас может быть петля, застрявшая где-то .. 40k элементов этого размера составляет всего 2 МБ. –