v5.dk logo
Kom ind og besøg vores Discord Chat-community
Bliv medlem her eller læs mere om Discord her
Kærlighed kan godt købes for penge
- vi elsker nemlig vores kunder :-)

Mere info Køb nu

Premium på v5.dk
v5.dk logo  v5.dk e-learning
Log på med Facebook
  • Log ind på v5.dk
  • Opret bruger
  • Log ind
  • v5.dk Premium
  • v5.dk Premium
  • Hvad siger vores kunder?
  • E-læring for begyndere
  • icon for WordPress 4 e-learning WordPress 4
  • icon for Office 365 e-learning Office 365
  • icon for Microsoft Word e-learning Microsoft Word
  • Bloggen for alle
  • E-læring for nørder
  • icon for PHP-programmering e-learning PHP-programmering
  • icon for iOS Programmering e-learning iOS Programmering
  • icon for Linux Server e-learning Linux Server
  • Bloggen for nørder
  • Arkiverede videoer
  • Fællesskab
  • Forum
  • Idéer og ønsker
  • Markedspladsen
  • v5.dk Premium
  • Gratis webhotel
  • Cloud-servere
  • Om v5.dk
  • Søg på v5.dk
  • Om v5.dk ApS
    • Om virksomheden
    • RSS-feeds og tjenester
    • Driftsmeddelelser
    • Presse-kit
    • Ledige jobs
    • Social Netværk
      • Facebook
      • Twitter
      • Instagram
    • Alt det andet
      • Forretningsbetingelser
      • Ophavsret og Copyright
  • Kontakt kundeservice
  • FAQ og Hjælp
    • Premium og abb.
    • Videoer og Afspiller
    • Forum og Points
    • Cloud-servers
  • Partner/Virksomhed
  • Partner-kanal
v5.dk logo mobile
  • Menu
  • Opret bruger

Hvorfor æder mit php script memory?

  • v5.dk
  • Forum
  • PHP-programmering
  • Hvorfor æder mit php script memory?
  • Sidevisninger: 3278 har set dette indlæg
Besvar #0Spørgsmål oprettet af @birkbonnicksen | 0 points
5 points ude 6 indlæg 7 år siden Spørgsmål besvaret
avatar
 

Hej,

 

Jeg har et problem med at mit PHP script æder vildt meget memory på min apache server.

Jeg har installeret Xampp 5.6.15 med standardindstillinger.

Når jeg kører mit scripts i browseren (holder F5 nede for at siden refreshes en masse gange) kan jeg se i Windows Task Manager at memory forbruget for processen "Apache HTTP Server (32 bit)" stiger og stiger fra ca. 13,1MB til den begynder at sløve ned når den når omkring 140MB, men den stiger stadig.

En kunde der har kørt med scriptet en uges tid, hvor scriptet bliver kørt hvert 5 min ca., havde et forbrug på ovennævnte process i Task Manageren på ca. 450MB. Og det tog ca. 1 min i browseren at køre scriptet..

Det er ikke et særlig avanceret script så forstår ikke hvad der er galt..

Kan i hjælpe?

 

Scriptet finder og læser en tekst på en hjemmeside hvorefter den laver det om til et RSS-feed.

Scriptet ser sådan her ud:

<?php
// ====
// Parse html start
// ====
# Use the Curl extension to query Google and get back a page of results
$url = "http://www.laesoe-line.dk/aktuelsejlads";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
$url = null;
unset($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$timeout = null;
unset($timeout);
$html = curl_exec($ch);
curl_close($ch);
$ch = null;
unset($ch);

# Create a DOM parser object
$dom = new DOMDocument();

# Parse the HTML from Google.
# The @ before the method call suppresses any warnings that
# loadHTML might throw because of invalid HTML in the page.
@$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
//@$dom->loadHTML($html);
$html = null;
unset($html);

$scanHtml = false;
$currentSailing = "Aktuel sejlads: ";

# Iterate over all the <a> tags
foreach($dom->getElementsByTagName('div') as $link) {
# Show the <div id>
if ($link->getAttribute('id') == "MainContent") {
$scanHtml = true;
}
if ($scanHtml) {
if ($link->getAttribute('class') == "Description") {
$currentSailing = $currentSailing . $link->nodeValue . " ";
}
}
if ($link->getAttribute('class') == "Clears") {
$scanHtml = false;
break;
}
}
$link = null;
unset($link);
$dom = null;
unset($dom);
$scanHtml = null;
unset($scanHtml);
// ====
// Parse html end
// ====

// ====
// RSS feed start
// ====
header("Content-Type: application/rss+xml; charset=UTF-8");

$rssfeed = '<?xml version="1.0" encoding="UTF-8"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>Fra Læsø Aktuel sejlads</title>';
$rssfeed .= '<link></link>';
$rssfeed .= '<description></description>';
$rssfeed .= '<language>da-dk</language>';
$rssfeed .= '<copyright></copyright>';

/** Get current info **/
$rssfeed .= '<item>';
$rssfeed .= '<title>' . $currentSailing . '</title>';
$currentSailing = null;
unset($currentSailing);
$rssfeed .= '</item>';

$rssfeed .= '</channel>';
$rssfeed .= '</rss>';

echo $rssfeed;
$rssfeed = null;
unset($rssfeed);
// ====
// RSS feed end
// ====
?>

 

Venlig hilsen Birk

avatar
 
Besvar#1 @simonpedersen Premium kommenterede for 7 år siden

Har du husket at tilføje antivirus exclusions på logs folderne? 

avatar
 
Besvar#2 @birkbonnicksen kommenterede for 7 år siden

Hmm, nej det har jeg godt nok ikke.

Hvad forskel vil det gøre?

Mvh

avatar
 
Besvar#3 @db Admin kommenterede for 7 år siden

Som 10012 @simonpedersen  nævner, hvis din antivirus-scanner står og scanner filerne, kan dette øge ressource-forbruget.

Ydermere kan hastigheden også påvirkes hvis den URL i henter fra, er langsom om at svare, hvis der kommer mange requests på jeres website, initiere det mange http-requests imod http://www.laesoe-line.dk/aktuelsejlads hvilket nemt kan være skyld load-tiderne.

Mit løsningsforslag ville være at implementere noget cache, så du gemmer indholdet af ovenstående URL lokalt i nogle minutter ad gangen. Det kan gøres rimeligt nemt, jeg har bygget et simpelt lille proof-of-concept eksempel til dig her:

<?php

$cache_file = '/var/www/mincachefil'; // Sti til cache fil
$minutter = 5; // Antal minutter en cache skal gemmes lokales
$url = 'http://www.laesoe-line.dk/aktuelsejlads';

if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * $minutter ))) {
   // Cache fil er mindre end 5 min. gammel
   // Hent cache-fil og vis dette:
   $rssfeed = file_get_contents($cache_file);
} else {
   // Vores cache er out-of-date, hent data fra remote server
   // og gem vores cache til næste gang
   $rssfeed = file_get_contents($url);
   file_put_contents($cache_file, $rssfeed, LOCK_EX);
}

Husk at $cache_file skal pege på en fil som er placeret på samme computer/server hvor PHP-scriptet eksekveres og at PHP skal have både læse og skriverettigheder til filen.


Med venlige hilsner

Daniel Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

Dette svar er accepteret af OP og tildelt 5 points
avatar
 
Besvar#4 @db Admin svarede for 7 år siden

Lad mig høre om det ikke hjælper dig at cache dit rss-feed. Jeg er ret sikker på det vil løse dine problemer.

Redigeret af db @db  d. 10.02.2016 kl. 21:56

Med venlige hilsner

Daniel Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

avatar
 
Besvar#5 @birkbonnicksen svarede for 7 år siden

 #4  

Det kunne godt være en god ide..

Men det er kun meningen at scriptet køreres hvert 5 minut..

Hvis det er fordi det bliver kørt for ofte kunne jeg vel bare køre det hver time eller sådan noget i stedet for.

Jeg har lige set på serveren hvor scriptet kører og apache processen brugte faktisk ikke særlig meget memory.. ca. 19MB og det har kørt en uge nu..

Så jeg tror slet ikke at det er mit script som laver ballade...

Undskyld min uvidenhed om php jeg tror det hele virker som det skal.

Mvh

 

avatar
 
Besvar#6 @db Admin kommenterede for 7 år siden

Ah, ja - hvis det ikke kører mere end hvert 5 minut, så er der ingen problemer med cache. Det var mere hvis du havde mange hits så scriptet blev kørt flere gange i sekundet eller "holdte F5 nede" som du skrev, så er cache en god idé.

God at du fik løst problemet :-) Ha' en god dag.


Med venlige hilsner

Daniel Bahls Signatur   Daniel Bahl (@db)
   CEO – v5.dk ApS

Spørgsmålet er besvaret, men du er altid mere end velkommen til at skrive en kommentar!
avatar
 

Du er ikke logget ind

Du skal være logget ind på v5.dk før du kan benytte vores forum. Det er ganske gratis at oprette en bruger.

Opret en ny gratis bruger Log ind

Følger med i denne tråd

birkbonnicksen db

Forum kategorier

  • Generelt
  • Guides & Howto85
  • Offtopic / Andet160
  • Microsoft Office
  • Microsoft Word13
  • Microsoft Excel4
  • Microsoft PowerPoint0
  • Web og hjemmesider
  • Wordpress17
  • Operativsystemer
  • Apple Mac OS X14
  • Apple iOS28
  • Microsoft Windows4
  • Linux16
  • Teknologier
  • Netværk og WiFi3
  • Internet-tjenester9
  • Programmering
  • PHP-programmering125
  • iPhone-/Xcode-programmering9

Aktive forum-tråde lige nu

pentobarbital kaufen ohne rezept
gras kaufen online - grasthc.com
online marketing
Køb juridiske dokumenter såsom kørekort, pas, visum, opholdstilladelse og andre dokumenter
Køb juridiske dokumenter såsom kørekort, pas, visum, opholdstilladelse og andre dokumenter
Weed online kaufen
Er det værd at have en "portfolio"-hjemmeside!?
Fejlkode i form af bip-lyde ved opstart af gammel stationær PC
Bygget med af v5.dk
© Copyright 2006-2023 • Forretningsbetingelser • Copyright • Persondata- og Cookiepolitik
v5.dk ApS - Åbogade 15 - 8200 Aarhus N - CVR: 36902833
v5.dk logo
Hej, vi hedder v5.dk og vi laver e-learning på dansk

v5.dk er sat i verden for at gøre teknologi tilgængeligt og anvendeligt for både professionelle og almindelige brugere på alle niveauer.

93 200 555
  Skriv til os
v5.dk bruger cookies til at huske dine indstillinger, livechat samt til statistik
 

Alle vores priser er inkl. moms Sikker SSL-beskyttet forbindelse

Dankort og Visa-Dankort  Visa  Mastercard og Mastercard Junior  Maestro

  • Produkter
  • v5.dk Premium
  • Cloud-servers
  • v5.dk
  • Om v5.dk
  • Kunderne siger
  • Kontakt os
  • Presse
  • Stay updated
  • RSS & tjenester
  • Søg på v5.dk
  • Sitemap