За последние 24 часа нас посетили 17627 программистов и 1722 робота. Сейчас ищут 943 программиста ...

вопрос по памяти для скрипта

Тема в разделе "PHP для новичков", создана пользователем vikrorpert, 6 янв 2014.

  1. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    есть такой код
    Код (Text):
    1.  
    2. <?php
    3. $start = microtime();
    4. $filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html';
    5. $cached = false;
    6. $time = 4 * 60 * 60; // Время кеша в секундах (4*60*60 = 4 часа)
    7. $stat = 0; // Установите 1 для вывода времени загрузки страницы (по умолчанию 0)
    8.  
    9. if (file_exists($filename)) {
    10. if ((time()-filemtime($filename))<$time) {
    11. $cached = true;
    12. } else {
    13. unlink($filename);
    14. $cached = false;
    15. }
    16. }
    17.  
    18. if ($cached) {
    19. readfile($filename);
    20. } else {
    21. ob_start();
    22.  
    23. // WP
    24. define('WP_USE_THEMES', true);
    25. require('./wp-blog-header.php');
    26. //
    27.  
    28. $text = ob_get_clean();
    29.  
    30. $fh = fopen($filename, 'w+');
    31. fwrite($fh, $text);
    32. fclose($fh);
    33.  
    34. echo $text;
    35. }
    36. $finish = microtime();
    37.  
    38. if ($stat==1) echo $finish-$start;
    39. ?>
    при первом выполнении, когда кеш пустой, ф-я memory_get_usage показывает 11 мб
    в дальнейшем, когда данные берутся из кеша выделяется 4 мб памяти

    не могу понять почему так происходит
    простое чтение с диска дает всего в 3 раза экономию памяти?

    как уменьшить память?
     
  2. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    readfile читает файл по кусочкам в 8192 байт и сразу отдаёт на вывод поэтому этой функцией можно очень большие файлы отдавать юзеру без потери памяти.
    Память не нужно уменьшать)

    Добавлено спустя 2 минуты 15 секунд:
    И кстати, во втором случае Вы используете ob_start(); - значит весь ваш вывод сохраняется в буфер (память) перед выводом.
     
  3. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    я имел ввиду уменьшить потребление памяти в скрипте

    я пробовал через file_get_contents -расход памяти не сильно изменился

    взял пустой пхп файл, вставил 1 строку
    Код (Text):
    1. echo round(memory_get_usage()/1024/1024, 2);
    и она показала 4 мб
    неужели нельзя расход памяти уменьшить?
     
  4. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    memory_get_usage показывает текущий расход памяти.
    Попробуйте использовать memory_get_peak_usage() и узнаете сколько памяти было израсходовано максимально за весь запуск (если проверка в конце скрипта).
     
  5. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    опять 4 мб для пустого файла
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а че тебе эта память далась?
     
  7. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    у меня на вдс куча сайтов
    если на каждую страницу по 4 мб то зайдет 1000 человек и получится 4 гб
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    11мб - эт канеш много, хотя для джумлы является нормой. А вот 4 мегабайта это уже не так много, если проект довольно крупный. Можно ссыль на страничку, отжирающую 4 метра?

    И да, а что за кеш используется? Просто файловый? И аккселератор стоит ли? Расход оперативы может лихо набегать кучей инклудов. Аккселератор нивелирует этот оверхед.
     
  9. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    так я писал что 4 мб для пустой страницы

    Код (Text):
    1.  
    2. <?php
    3.  
    4. echo memory_get_peak_usage();
    вот такой код выводит 4 мб
    memory_get_peak_usage тоже самое
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    чочочочочочочочочо? О_о Для пустой страницы под вордпрессом/джумлой или просто для пустой страницы? У меня за 4 метра памяти можно 1000+ модулей инициализировать и на страницу выбросить, причем в эти 4 метра входить будет еще буфер вывода, в котором лежит JS и тд.

    Во:

    [​IMG]
    И это без аккселератора. Хотя он тут сэкономит от силы килобайт 250, которые ушли на парсинг. Основной объем все равно занимает буфер вывода.
     
  11. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    пустая страница значит что в коде ничего нету, ничего не подключается
    весь код

    Код (Text):
    1. <?php
    2.  
    3. echo memory_get_peak_usage();
    4.  
    5. ?>
    выводит 4307876
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это ни есть нормально, так не должно быть. Как у вас php подключен к серверу? Какие стоят расширения левые?
     
  13. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    а как посмотреть?
    это вдс
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В phpinfo, конечно же. Server API. Ну а модули дополнительные левые - там же, но в отдельных секциях. Или в конфиге пыха. Второе удобнее.
     
  15. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    это оно?
    [​IMG]
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да оно, но виновато не оно.
     
  17. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    тогда куда копать?
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    xdebug есть? В нем трассировку сделайте, и лог сюда, чтобы было видно, память отожрана до исполнения или во время все же.
     
  19. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    xdebug в пхп инфо не нашел, наверное не стоит
    без него никак?
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
  21. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    auto_prepend_file в pnp.ini пустой
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в один момент если к тебе зайдёт тыща человек, То у тебя и так и сяк всё помрёть. Но вот когда зайдёт - можно будет купить сервак пожирнеече.

    Добавлено спустя 5 минут 12 секунд:
    Померял у себя, получил 703008 байт. наверное корошо. Цмс самопис.
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ды вообще ок.
     
  24. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    блин я же не пишу что у меня цмс или джумла или еще чтото
    просто пустой файл вобще без кода сжирает 4 метра

    хостер отмахивается изза того что у меня вдс и я должен сам им заниматься или платить за услуги
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А кто сервер настраивал? Ось ставил? Кто пхп подключал?