Skip to content

Low memory setup it IT

ArchiBot edited this page Jul 8, 2025 · 28 revisions

Setup a bassa memoria

Questo Γ¨ esattamente l'opposto della configurazione ad alte prestazioni e in genere si desidera seguire questi suggerimenti se si desidera diminuire l'utilizzo di memoria di ASF, per il costo della riduzione delle prestazioni globali.


ASF Γ¨ estremamente leggero sulle risorse per definizione, a seconda del tuo utilizzo anche 128 MB VPS con Linux Γ¨ in grado di eseguirlo, anche se andare che basso non Γ¨ raccomandato e puΓ² portare a vari problemi. Pur essendo leggero, ASF non ha paura di chiedere OS per piΓΉ memoria, se tale memoria Γ¨ necessaria per ASF per funzionare con velocitΓ  ottimale.

ASF come un'applicazione cerca di essere ottimizzata ed efficiente il piΓΉ possibile, il che tiene conto anche delle risorse utilizzate durante l'esecuzione. Quando si tratta di memoria, ASF preferisce prestazioni rispetto al consumo di memoria, che puΓ² portare a "punti" di memoria temporanea, che si possono notare, ad es. con account con 3+ pagine distintivo, come ASF recupererΓ  e analizzerΓ  la prima pagina, leggere da esso il numero totale di pagine, quindi avviare attivitΓ  di recupero per ogni pagina extra, che si traduce in recupero simultaneo e l'analisi delle pagine rimanenti. Quel "extra" utilizzo della memoria (rispetto al minimo nudo per il funzionamento) puΓ² velocizzare notevolmente l'esecuzione e le prestazioni complessive, per il costo di un maggiore utilizzo della memoria che Γ¨ necessario per fare tutte queste cose in parallelo. La cosa simile sta accadendo a tutte le altre attivitΓ  generali di ASF che possono essere eseguite in parallelo, ad es. con l'analisi delle offerte di trading attive, ASF puΓ² analizzarle tutti contemporaneamente, in quanto sono tutti indipendenti l'uno dall'altro. In cima a quello, ASF (C# runtime) non restituirΓ  la memoria inutilizzata al sistema operativo immediatamente dopo, che si puΓ² notare rapidamente in forma di processo di ASF solo prendendo sempre piΓΉ memoria, ma (quasi) non restituire mai quella memoria al sistema operativo. Alcune persone potrebbero giΓ  trovare discutibile, forse anche sospettare una perdita di memoria, ma non preoccupatevi, tutto questo Γ¨ da aspettarsi.

ASF Γ¨ estremamente ben ottimizzato e fa uso delle risorse disponibili il piΓΉ possibile. Un elevato utilizzo di memoria di ASF non significa che ASF attivamente utilizzi quella memoria e ne ha bisogno. Molto spesso ASF manterrΓ  la memoria assegnata come "stanza" per azioni future, perchΓ© possiamo migliorare drasticamente le prestazioni se non abbiamo bisogno di chiedere il sistema operativo per ogni pezzo di memoria che stiamo per usare. Il runtime dovrebbe rilasciare automaticamente la memoria ASF non utilizzata di nuovo al sistema operativo quando il sistema operativo veramente ne ha bisogno. La memoria inutilizzata Γ¨ sprecata. Si verificano problemi quando la memoria di cui hai bisogno **** Γ¨ superiore alla memoria disponibile per te, non quando ASF mantiene qualche extra assegnato con lo scopo di velocizzare le funzioni che eseguiranno in un momento. Si verificano problemi quando il kernel Linux sta uccidendo il processo di ASF a causa di OOM (memoria esaurita), non quando vedi il processo ASF come consumatore di memoria superiore in htop.

Il processo Garbage collection utilizzato in ASF è un meccanismo molto complesso, abbastanza intelligente da prendere in considerazione non solo ASF stesso, ma anche il vostro sistema operativo e altri processi. Quando si dispone di un sacco di memoria gratuita, ASF chiederà tutto ciò che è necessario per migliorare le prestazioni. Questo può essere anche fino a 1 GB (con server GC). Quando la memoria del sistema operativo è vicina ad essere piena, ASF rilascerà automaticamente alcuni di essi al sistema operativo per aiutare le cose a stabilizzarsi, che può portare a un utilizzo complessivo di memoria ASF fino a 50 MB. La differenza tra 50 MB e 1 GB è enorme, ma così è la differenza tra il piccolo VPS 512 MB e l'enorme server dedicato con 32 GB. Se ASF è in grado di garantire che questa memoria sarà utile, e allo stesso tempo niente altro richiede in questo momento, preferirà mantenerlo e ottimizzarsi automaticamente in base alle routine che sono state eseguite in passato. Il GC utilizzato in ASF è auto-tuning e otterrà risultati migliori più a lungo il processo è in esecuzione.

Questo Γ¨ anche il motivo per cui la memoria di processo ASF varia da configurazione a configurazione, as ASF will do its best to use available resources in as efficient way as possible, e non in modo fisso come Γ¨ stato fatto durante i tempi di Windows XP. L'utilizzo effettivo (reale) della memoria che ASF sta utilizzando puΓ² essere verificato con il comando statistiche , e di solito Γ¨ di circa 4 MB per pochi bot, fino a 30 MB se usi cose come IPC e altre funzionalitΓ  avanzate. Tieni presente che la memoria restituita dal comando statistiche include anche la memoria libera che non Γ¨ stata ancora recuperata dal raccoglitore di rifiuti. Tutto il resto Γ¨ condiviso memoria di esecuzione (circa 40-50 MB) e spazio per l'esecuzione (varia). Questo Γ¨ anche il motivo per cui lo stesso ASF puΓ² utilizzare meno di 50 MB in ambiente VPS a bassa memoria, durante l'utilizzo fino a 1 GB sul desktop. ASF si sta attivamente adattando al vostro ambiente e cercherΓ  di trovare un equilibrio ottimale per non mettere il vostro sistema operativo sotto pressione, nΓ© limitare le proprie prestazioni quando si dispone di un sacco di memoria inutilizzata che potrebbe essere messo in uso.


Naturalmente, ci sono un sacco di modi come si puΓ² aiutare a puntare ASF nella giusta direzione in termini di memoria che si prevede di utilizzare. In generale, se non avete bisogno di farlo, Γ¨ meglio lasciare che il collezionista rifiuti lavori in pace e fare tutto ciΓ² che ritiene sia meglio. Ma questo non Γ¨ sempre possibile, ad esempio se il tuo server Linux ospita anche diversi siti web, database MySQL e operatori PHP, allora non si puΓ² davvero permettersi ASF restringendosi quando si corre vicino a OOM, come di solito Γ¨ troppo tardi e il degrado delle prestazioni arriva prima. Questo Γ¨ di solito quando si potrebbe essere interessati ad ulteriore sintonizzazione, e quindi leggere questa pagina.

Di seguito i suggerimenti sono suddivisi in poche categorie, con varie difficoltΓ .


Installazione ASF (facile)

I trucchi di seguito non influiscono negativamente sulle prestazioni e possono essere applicati in modo sicuro a tutte le configurazioni.

  • Eseguire versione generica di ASF se possibile. La versione generica di ASF utilizza meno memoria poichΓ© non include runtime all'interno, non viene come singolo file, non ha bisogno di scompattarsi in esecuzione, ed Γ¨ quindi piΓΉ piccolo e ha meno impronta di memoria. I pacchetti specifici per il sistema operativo sono pratici e convenienti, ma sono anche in bundle con tutto il necessario per lanciare ASF, che Γ¨ qualcosa che si puΓ² prendere cura di te stesso e utilizzare generico variante ASF invece.
  • Non eseguire mai piΓΉ di un'istanza di ASF. ASF Γ¨ destinato a gestire un numero illimitato di bot tutti in una sola volta, e a meno che tu non leghi ogni istanza di ASF a diverse interfacce / indirizzo IP, si dovrebbe avere esattamente un processo di ASF, con piΓΉ bot (se necessario).
  • Fai uso di ShutdownOnFarmingFinished nel bot FarmingPreferences. Il bot attivo richiede piΓΉ risorse di quelle disattivate. Non Γ¨ un risparmio significativo, poichΓ© lo stato del bot deve ancora essere mantenuto, ma stai risparmiando una certa quantitΓ  di risorse, in particolare tutte le risorse relative alla rete, come i socket TCP. Se necessario, puoi sempre allevare altri bot.
  • Tieni basso il tuo numero di bot. L'istanza del bot Abilitata da richiede meno risorse, poichΓ© ASF non disturba l'avvio. Tenete anche a mente che ASF deve creare un bot per ciascuna delle vostre configurazioni, quindi se non hai bisogno di avviare il bot dato e vuoi salvare qualche memoria extra, puoi rinominare temporaneamente il bot . son ad esempio Bot.json.bak per evitare di creare lo stato per l'istanza del bot disabilitato in ASF. In questo modo non sarai in grado di avviare senza rinominarlo indietro, ma anche ASF non si preoccupa di mantenere lo stato di questo bot in memoria, lasciando spazio ad altre cose (risparmio molto piccolo, in 99. % casi che non dovresti preoccuparti con esso, basta tenere i tuoi bot con Abilitato di false).
  • Ottimizza le tue configurazioni. Soprattutto la configurazione globale di ASF ha molte variabili da regolare, ad esempio aumentando LoginLimiterDelay potrai far apparire i tuoi bot piΓΉ lentamente, che permetterΓ  all'istanza giΓ  avviata di recuperare i badge nel frattempo, al contrario di allevare i tuoi bot piΓΉ velocemente, che prenderanno piΓΉ risorse in quanto piΓΉ bot faranno il lavoro importante (come il badge di analizzazione) allo stesso tempo. Meno lavoro che deve essere fatto allo stesso tempo - meno memoria utilizzata.

Quelle sono alcune cose che si puΓ² tenere a mente quando si tratta di utilizzo della memoria. Tuttavia, quelle cose non hanno alcuna questione "cruciale" sull'uso della memoria, perchΓ© l'utilizzo della memoria proviene principalmente da cose che ASF ha a che fare con e non da strutture interne utilizzate per l'agricoltura di carte.

Le funzioni piΓΉ pesantissime sono le seguenti:

  • Analisi della pagina distintivo
  • Analisi inventario

Il che significa che la memoria punterΓ  di piΓΉ quando ASF si occupa di leggere pagine distintivo, e quando si tratta del suo inventario (e. . invio di commercio o di lavoro con STM). Questo perchΓ© ASF ha a che fare con davvero enorme quantitΓ  di dati - l'utilizzo di memoria del browser preferito lanciando queste due pagine non sarΓ  inferiore a quello. Siamo spiacenti, questo Γ¨ il modo in cui funziona - diminuisce il numero delle tue pagine distintivo e mantiene basso il numero degli oggetti dell'inventario, che puΓ² essere di sicuro aiuto.


Runtime tuning (avanzato)

Di seguito i trucchi comportano il degrado delle prestazioni e devono essere utilizzati con cautela.

Il modo raccomandato per applicare queste impostazioni Γ¨ attraverso le proprietΓ  ambientali DOTNET_. Naturalmente, Γ¨ possibile utilizzare anche altri metodi, ad esempio runtimeconfig. son, ma alcune impostazioni sono impossibili da impostare in questo modo, e in cima a questo ASF sostituirΓ  il tuo custom runtimeconfig. son con la propria sul prossimo aggiornamento, quindi consigliamo le proprietΓ  ambientali che puoi impostare facilmente prima di avviare il processo.

.NET runtime consente di tweak spazzbage collector in molti modi, perfezionamento efficace del processo GC in base alle vostre esigenze. Abbiamo documentato sotto proprietΓ  che sono particolarmente importanti a nostro parere.

Specifica l'uso consentito di heap GC come percentuale della memoria fisica totale.

Il limite di memoria "duro" per il processo ASF, questa impostazione sintonizza GC per utilizzare solo un sottoinsieme di memoria totale e non tutti. PuΓ² diventare particolarmente utile in varie situazioni simili a server in cui Γ¨ possibile dedicare una percentuale fissa della memoria del server per ASF, ma mai piΓΉ di quello. Essere avvisato che limitare la memoria per ASF da utilizzare non farΓ  magicamente tutte quelle allocazioni di memoria necessarie andare via, quindi la fissazione di questo valore troppo basso potrebbe portare a esaurire gli scenari di memoria, in cui il processo di ASF sarΓ  costretto a terminare.

D'altra parte, impostare questo valore abbastanza alto Γ¨ un modo perfetto per garantire che ASF non userΓ  mai piΓΉ memoria di quanto si possa realisticamente permettere, dando alla vostra macchina un po 'di stanza di respirazione anche sotto carico pesante, pur consentendo al programma di fare il suo lavoro nel modo piΓΉ efficiente possibile.

Configura il collezionista della spazzatura per conservare la memoria a scapito delle collezioni di spazzatura piΓΉ frequenti e possibilmente tempi di pausa piΓΉ lunghi.

Si puΓ² usare un valore compreso tra 0 e 9. PiΓΉ grande Γ¨ il valore, piΓΉ GC ottimizzerΓ  la memoria sulle prestazioni.

Specifica la quantitΓ  di memoria utilizzata dopo la quale GC diventa piΓΉ aggressivo.

Questa impostazione configura la soglia di memoria di tutto il sistema operativo, che una volta passato, provoca GC a diventare più aggressivo e tentare di aiutare il sistema operativo a ridurre il carico di memoria eseguendo un processo GC più intensivo e nel risultato rilasciando più memoria libera di nuovo al sistema operativo. È una buona idea impostare questa proprietà alla quantità massima di memoria (come percentuale) che si considera "critico" per le prestazioni di tutto il sistema operativo. Il valore predefinito è 90%, e di solito si desidera mantenerlo nell'intervallo 80-97%, poiché un valore troppo basso causerà un'aggressione inutile da parte del GC e il degrado delle prestazioni senza alcun motivo, mentre un valore troppo alto metterà un carico inutile sul tuo sistema operativo, considerando che ASF potrebbe rilasciare parte della sua memoria per aiutare.

Specifica il livello di latenza GC per cui si desidera ottimizzare.

Questa Γ¨ proprietΓ  non documentata che si Γ¨ rivelato funzionare eccezionalmente bene per ASF, limitando le dimensioni delle generazioni di GC e facendo in modo che GC li purifichi piΓΉ frequentemente e piΓΉ aggressivamente. Il livello di latenza predefinito (bilanciato) Γ¨ 1, ma Γ¨ possibile utilizzare 0, che si sintonizzerΓ  per l'utilizzo della memoria.

Quando impostato, tagliamo lo spazio impegnato in modo piΓΉ aggressivo per il segmento effimero. Questo viene utilizzato per eseguire molte istanze di processi server in cui vogliono mantenere la minima memoria impegnata possibile.

Questo offre pochi miglioramenti, ma puΓ² rendere GC ancora piΓΉ aggressivo quando il sistema sarΓ  basso sulla memoria, soprattutto per ASF che fa uso di attivitΓ  filettatura pesantemente.


È possibile abilitare le proprietà selezionate impostando le variabili di ambiente appropriate. Ad esempio, su Linux (shell):

# Non dimenticare di sintonizzare quelli se hai intenzione di utilizzarli
export DOTNET_GCHeapHardLimitPercent=0x4B # 75% as hex
export DOTNET_GCHighMemPercent=0x50 # 80% as hex

export DOTNET_GCConserveMemory=9
export DOTNET_GCLatencyLevel=0
export DOTNET_gcTrimCommitOnLowMemory=1

. ArchiSteamFarm # For OS-specific build
./ArchiSteamFarm.sh # For generic build

O su Windows (powershell):

# Non dimenticate di sintonizzare quelli se avete intenzione di utilizzarli
$Env:DOTNET_GCHeapHardLimitPercent=0x4B # 75% come esadecimale
$Env:DOTNET_GCHighMemPercent=0x50 # 80% come esadecimale

$Env:DOTNET_GCConserveMemory=9
$Env:DOTNET_GCLatencyLevel=0
$Env:DOTNET_gcTrimCommitOnLowMemory=1

. ArchiSteamFarm.exe # For OS-specific build
.\ArchiSteamFarm.cmd # For generic build

Soprattutto GCLatencyLevel sarà molto utile in quanto abbiamo verificato che il runtime effettivamente ottimizza il codice per la memoria e quindi diminuisce in modo significativo l'utilizzo della memoria media, anche con server GC. È uno dei migliori trucchi che puoi applicare se vuoi ridurre significativamente l'utilizzo della memoria ASF senza degradare troppo le prestazioni con OptimizationMode.


Regolazione ASF (intermedia)

Di seguito i trucchi comportano una grave degradazione delle prestazioni e devono essere utilizzati con cautela.

  • Come ultima risorsa, Γ¨ possibile sintonizzare ASF per MinMemoryUsage tramite OptimizationMode global config property. Legga attentamente il suo scopo, in quanto questo Γ¨ un grave degrado delle prestazioni per quasi nessun beneficio di memoria. Questa Γ¨ tipicamente l'ultima cosa che vuoi fare, molto tempo dopo aver attraversato runtime tuning per assicurarsi di essere costretti a farlo. A meno che non sia assolutamente critico per la tua configurazione, scoraggiamo l'utilizzo di MinMemoryUsage, anche in ambienti con vincoli di memoria.

Ottimizzazione consigliata

  • Inizia da semplici trucchi di configurazione di ASF, usa la variante generica di ASF e controlla se forse stai solo usando il tuo ASF in modo sbagliato, ad esempio avviando il processo piΓΉ volte per tutti i tuoi bot, o mantenerli tutti attivi se avete bisogno solo di uno o due per autostart.
  • Se non Γ¨ ancora sufficiente, abilita tutte le proprietΓ  di configurazione elencate sopra impostando le variabili di ambiente appropriate DOTNET_. Soprattutto GCLatencyLevel offre significativi miglioramenti di runtime per un costo limitato sulle prestazioni.
  • Se anche questo non ha aiutato, come ultima risorsa abilita MinMemoryUsage OptimizationMode. Questo costringe ASF a eseguire quasi tutto in materia sincrona, farlo funzionare molto piΓΉ lentamente, ma anche non fare affidamento sul pool di thread per bilanciare le cose quando si tratta di esecuzione parallela.

È fisicamente impossibile ridurre ulteriormente la memoria, il tuo ASF è già fortemente degradato in termini di prestazioni e hai esaurito tutte le tue possibilità, sia in termini di codice che in termini di runtime-wise. Considerare l'aggiunta di qualche memoria in più per ASF da usare, anche 128 MB farebbe una grande differenza.

Clone this wiki locally