* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 25, 2024, 12:39:34 am

Inserisci il nome utente, la password e la durata della sessione.

256 Visitatori, 0 Utenti

Autore Topic: Webserver e pascal script - problema  (Letto 2261 volte)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Webserver e pascal script - problema
« il: Maggio 19, 2021, 12:53:41 pm »
Ciao a tutti. Ho un problema con un mio programmino. Praticamente un web server che interpreta del codice pascal attraverso pascal script.
L'esempio è banale, ma quando uso in maniera massiccia il programma la memoria occupata sale e non viene liberata fino alla chiusura del programma.
Testato con ubuntu e mac os. Il problema è replicato su entrambi.
Per replicare il problema scaricate il file allegato e decomprimetelo.
Poi compilate il progetto

laz_https_server_test_ps/pkg/laz_http_server.lpi

Successivamente compilate la console per stressare il programma

laz_https_server_test_ps/console/pkg/console.lpi (richiede le indy installate)

Entrambi gli eseguibili vengono creati in

laz_https_server_test_ps/bin/

Ora lanciate entrambi i programmi (laz_http_server da terminale), aprite il monitor delle attività e identificate la riga di laz_http_server e monitorate la memoria occupata.
Poi spostatevi sulla console che avete compilato e premete l'unico checkbox che trovate e in successione il pulsante che trovate in altro a sinistra.

Praticamente la console si occuperà di interrogare ciclicamente il programma laz_http_server. Quando volete bloccarlo basta che togliete il flag al componente checkbox.








Ieri è passato, domani è futuro, oggi è un dono...

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #1 il: Maggio 19, 2021, 09:59:34 pm »
Ciao.

Allego il file console.lpi modificato per la compatibilità con le versioni "stable" di Lazarus.

I progetti venogno compilati ed eseguiti sotto Windows. Provo ad analizzare quanto hai descritto.

Saluti
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #2 il: Maggio 19, 2021, 10:16:14 pm »
Eseguendo quanto sopra io in Windows ottengo un:

"HTTP/1.1 500 Internal Server Error"

da parte del programma console, e la memoria del server web aumenta.

Saluti
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #3 il: Maggio 19, 2021, 11:01:11 pm »
Sembra, anzi è certo, che il web server "cerchi" alcune risorse che non trova, ed in effetti file RES o LRS non esistono ne vengono creati neanche ricompilando.

Mancano queste risorse:
 TCustomHTTPModule
 TSessionHTTPModule
 TCustomFPWebModule
 TFPWebModule

Questo è probabilmente la causa dell'aumento di memoria.

Saluti
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Webserver e pascal script - problema
« Risposta #4 il: Maggio 19, 2021, 11:13:23 pm »
Sembra, anzi è certo, che il web server "cerchi" alcune risorse che non trova, ed in effetti file RES o LRS non esistono ne vengono creati neanche ricompilando.

Mancano queste risorse:
 TCustomHTTPModule
 TSessionHTTPModule
 TCustomFPWebModule
 TFPWebModule

Questo è probabilmente la causa dell'aumento di memoria.

Saluti
Se hai risolto cortesemente potresti l'esempio corretto?! Grazie mille
Ieri è passato, domani è futuro, oggi è un dono...

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #5 il: Maggio 20, 2021, 12:13:45 am »
No, no ... non ho risolto.

Ho solo visto che il web server cerca di caricare quelle "resource" e non le trova, generando la risposta "500".

Il webserver gira e non crasha, ma risponde sempre con la "Server Internal Error" e ad ogni richiesta del client aumenta la memoria occupata.

Molto probabilmente il mancato caricamento delle risorse manda in "crash" il trhread relativo (che dovrebbe essere creato ad ogni richiesta del client ???) e la memoria non viene liberata.

Occorre approfondire ... probabilmente manca qualcosa nell'uso di fpweb. Domani se riesco provo a dare una occhiata.

'Notte
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Webserver e pascal script - problema
« Risposta #6 il: Maggio 20, 2021, 07:12:12 am »
Ma se così fosse dovrebbe occupare memoria anche se commenti la parte di Pascal script. Invece il problema si verifica per via del psscript1.compile ma non capisco il perché.
Ieri è passato, domani è futuro, oggi è un dono...

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #7 il: Maggio 20, 2021, 07:42:51 pm »
Ciao e scusa per l'attesa nella risposta.

Allora ho dovuto un pò trafficare perchè in Windows, quando l'applicazione è a linea di comando non sono disponibili le risorse (vedi post precedenti) e deve essere fatto tutto a mano. C'è una nota di fpc che conferma questo (stralcio).
Citazione
Pure Hand Coding (No Form Designer Required)

It's not a must to use Lazarus' form designer to write an fpWeb application. You can use pure hand coding technique to write it. The secret lies in the 3rd parameter of RegisterHTTPModule : SkipStreaming. When this parameter is set to true, fpWeb will not search for .lfm resource. Therefore everything must be manually handled: property settings, event handlers, action registration, etc.


Quello che hai descritto effettivamente accade esattamente anche in Windows e accade con una frequenza e con un valore di incremento di memoria che è variabile e quindi sono convinto che non è un lag ma il normale funzionamento dell'applicativo come web server,

Di fatto usando una utility VMMAP che mappa tutta la memoria dell'applicativo, consentendo anche di forzare il rilascio della classica memoria di "paginazione" che viene bloccata dal sistema operativo con tecnologie o a tempo o per quantità (il tutto bilanciato dal carico del PC), si rileva che l'applicativo ritorna sempre alla quantità di memoria originale quando si rilascia la memoria.

Ho fatto diverse prove, usando semafori per evitare la chiamata sovrapposta anche in caso di uso del pool di thread, e devo dire che di fatto "leak" non c'è (anche se i dati visualizzati direbbero l'incontrario).

Tra poco aggiungerò un post con gli screen shoot ..... 
« Ultima modifica: Maggio 20, 2021, 10:03:33 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #8 il: Maggio 20, 2021, 09:59:56 pm »
1) Immagine iniziale con la memoria usata dall'app;
2) Immagine con app in esecuzione, memoria usata;
3) Immagine dopo l'azzeramento del workset;

Si vede che la memoria in uso è tornata ai valori iniziali.

Saluti
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Webserver e pascal script - problema
« Risposta #9 il: Maggio 21, 2021, 01:01:32 pm »
avete fatto la prova attivando heaptrc sulle opzioni del compilatore?
lanciando a riga di comando, quando il programma termina ti fa vedere se ci sono effettivamente dei leak
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #10 il: Maggio 21, 2021, 03:02:56 pm »
Si, nessun problema riscontrato. D'altronde in linea generale (anche se l'analisi è un pò più complessa) quando resetti il "workset" e la memoria ritorna al livello iniziale (fatto salve eventuali allocazioni permanenti durante l'uso) non ci dovrebbero essere sorprese.

Occorre approfondire l'uso specifico sia di fpweb che di psscript, in particolare sull'uso dei thread: ossia  i "datamodule", i "callback" o gli "eventi" sono threadsafe o si devono serializzare gli accessi alle risorse comuni, come ad esempio la variabile mynumber usata in quest'esempio ?

In allegato due report: 1 blocco con 10 cicli, 2 blocco con 100 cicli.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Webserver e pascal script - problema
« Risposta #11 il: Maggio 22, 2021, 10:07:58 am »
Ciao
ci ho lavorato un po' anche io ma non ne sono venuto a capo...

Ho trovato questo link che dice che alcuni errori sono normali all'interno del debugger.
https://lists.lazarus-ide.org/pipermail/lazarus/2011-August/196238.html
Ricevo comunque l'internal server error e non so da cosa dipende. :(

Cmq proverei a rifare il tutto senza il TFPWebModule ma scrivendo tutto il codice a manina.
Di sicuro si evitano i problemi con le risorse che in un http server non servono.
« Ultima modifica: Maggio 22, 2021, 10:17:39 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Webserver e pascal script - problema
« Risposta #12 il: Maggio 22, 2021, 12:17:17 pm »
Ciao
ci ho lavorato un po' anche io ma non ne sono venuto a capo...

Ho trovato questo link che dice che alcuni errori sono normali all'interno del debugger.
https://lists.lazarus-ide.org/pipermail/lazarus/2011-August/196238.html
Ricevo comunque l'internal server error e non so da cosa dipende. :(

Cmq proverei a rifare il tutto senza il TFPWebModule ma scrivendo tutto il codice a manina.
Di sicuro si evitano i problemi con le risorse che in un http server non servono.

Allego il progetto "a mano", ancora più semplificato rispetto al progetto di @xinyiman. CIò che è stato riportato corrisponde, ma non è un problema. La memoria in uso verrà liberata quando al sistema operativo serve (almeno così dovrebbe essere).

Saluti
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Webserver e pascal script - problema
« Risposta #13 il: Maggio 22, 2021, 01:14:20 pm »
ho fatto dei test: così non ci sono più gli internal error e la memoria non aumenta durante la vita del server :)

rimane solo un blocco non liberato, bisogna capire cos'è ma mi sembra che vada molto meglio
Imagination is more important than knowledge (A.Einstein)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Webserver e pascal script - problema
« Risposta #14 il: Maggio 24, 2021, 04:53:09 pm »
Ho provato il codice di DragoRosso, ho constatato quanto segue

Se eseguo il codice così com'è la memoria usata non aumenta nel tempo.
Se vado a togliere la compilazione con  heaptrc la memoria occupata cresce nel tempo.

Sia su linux che su mac. Arrivati a questo punto mi basta compilare usando questa modalità. Però è una cosa curiosa.
Ieri è passato, domani è futuro, oggi è un dono...

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 252
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 256
Total: 256

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.