当前位置:网站首页>Analyse complète Memcached – 2. Comprendre le stockage de mémoire pour Memcached
Analyse complète Memcached – 2. Comprendre le stockage de mémoire pour Memcached
2022-06-24 21:26:00 【Bonjour, C + +!】
Je suismixiCo., Ltd.Maesaka, du Groupe de recherche et développement. La dernière foisL'article dememcachedEst un serveur de cache distribué. Cette fois, je vous présentememcachedLa façon dont la construction interne de,Et la façon dont la mémoire est gérée. En plus,memcachedLes faiblesses dues à la structure interne de.
Slab AllocationMécanismes:Organiser la mémoire pour la réutilisation
Le plus prochememcachedPar défaut, le nom estSlab AllocatorRépartition des mécanismes、Gérer la mémoire. Avant l'apparition du mécanisme,L'allocation de la mémoire se fait simplement en faisant tous les enregistrementsmallocEtfreePour le faire.. Mais,De cette façon, la mémoire peut être fragmentée,Alourdir le fardeau du gestionnaire de mémoire du système d'exploitation,Dans le pire des cas, Il en résulte un système d'exploitation plus rapide quememcachedLe processus lui - même est lent.Slab AllocatorEst né pour résoudre ce problème.
Regarde ça.Slab AllocatorLe principe.En bas.memcachedDans le documentslab allocatorObjectifs:
the primary goal of the slabs subsystem in memcached was to eliminate memory fragmentation issues totally by using fixed-size memory chunks coming from a few predetermined size classes.
C'est - à - dire,Slab Allocator La raison d'être est de respecter une taille prédéterminée , Diviser la mémoire allouée en blocs de longueur spécifique , Pour résoudre complètement le problème de fragmentation de la mémoire.
Slab Allocation C'est assez simple. . Diviser la mémoire allouée en blocs de différentes tailles (chunk), Et diviser les blocs de la même taille en groupes (chunkCollection de)(Fig.1).

Fig.1 Slab Allocation Carte tectonique de
Et,slab allocator Il y a aussi le but de réutiliser la mémoire allouée . C'est - à - dire, La mémoire allouée ne sera pas libérée ,C'est la réutilisation..
Slab Allocation Principaux termes
Page
Affectation àSlabEspace mémoire pour,Par défaut1MB.Affectation àSlabPar la suite,slab Taille divisée en chunk.
Chunk
Espace mémoire utilisé pour mettre en cache les enregistrements .
Slab Class
Taille spécifique chunkGroupe.
InSlab Principes de mise en cache des enregistrements
La description suivante:memcached Comment sélectionner les données envoyées par le client slabEt mis en cache danschunkMoyenne.
memcached Selon la taille des données reçues , Sélectionner la taille de données la plus appropriée slab(Fig.2). memcachedIl y aslab Ralenti interne chunkListe de, Sélectionner à partir de cette liste chunk, Les données sont ensuite mises en cache .

Fig.2 Méthode de sélection des groupes pour stocker les enregistrements
En fait,,Slab Allocator Il y a des avantages et des inconvénients. . Voici quelques - uns de ses inconvénients .
Slab AllocatorLes inconvénients de
Slab Allocator Résoudre le problème initial de fragmentation de la mémoire , Mais de nouveaux mécanismes memcachedÇa pose de nouveaux problèmes.
La question est, Parce qu'une certaine longueur de mémoire est allouée , Par conséquent, la mémoire allouée ne peut pas être utilisée efficacement . Par exemple,Oui.100 Octets de données mis en cache vers 128OctetschunkMoyenne,Reste28 Les octets sont gaspillés. (Fig.3).

Fig.3 chunkUtilisation de l'espace
Il n'y a pas de solution parfaite à ce problème , Mais des solutions plus efficaces sont documentées .
The most efficient way to reduce the waste is to use a list of size classes that closely matches (if that’s at all possible) common sizes of objects that the clients of this particular installation of memcached are likely to store.
C'est - à - dire, Si la taille publique des données envoyées par le client est connue à l'avance , Ou seulement si les données de la même taille sont mises en cache , Il suffit d'utiliser une liste de groupes adaptés à la taille des données , Pour réduire les déchets .
Mais je suis désolé., Il n'y a pas de réglage pour le moment , Je ne peux m'attendre qu'à une version ultérieure. . Mais,On peut ajusterslab class Différence de taille . Ensuite, expliquezgrowth factorOptions.
UtiliserGrowth FactorAjuster
memcachedSpécifier au démarrage Growth FactorFacteurs(Adoption-fOptions), Peut être contrôlé dans une certaine mesure slabLes différences entre.La valeur par défaut est1.25. Mais, Avant cette option , Ce facteur était autrefois fixé à 2,Appelé“powers of 2”Stratégie.
Utilisons les paramètres précédents ,ParverboseMode activémemcachedEssaie.:
$ memcached -f 2 -vv
Après le démarrage verboseProduits:
slab class 1: chunk size 128 perslab 8192
slab class 2: chunk size 256 perslab 4096
slab class 3: chunk size 512 perslab 2048
slab class 4: chunk size 1024 perslab 1024
slab class 5: chunk size 2048 perslab 512
slab class 6: chunk size 4096 perslab 256
slab class 7: chunk size 8192 perslab 128
slab class 8: chunk size 16384 perslab 64
slab class 9: chunk size 32768 perslab 32
slab class 10: chunk size 65536 perslab 16
slab class 11: chunk size 131072 perslab 8
slab class 12: chunk size 262144 perslab 4
slab class 13: chunk size 524288 perslab 2
Visible,De128 Début du Groupe d'octets , La taille du Groupe augmente à son tour 2X. Le problème avec ce réglage est ,slab Il y a une grande différence entre , Dans certains cas, c'est un gaspillage de mémoire . Donc,, Pour minimiser les déchets de mémoire , Ajouté il y a deux ans growth factorCette option.
Pour voir les paramètres par défaut actuels (f=1.25)La sortie de(Limite d'espace, Il n'y a que le numéro 10Groupe):
slab class 1: chunk size 88 perslab 11915
slab class 2: chunk size 112 perslab 9362
slab class 3: chunk size 144 perslab 7281
slab class 4: chunk size 184 perslab 5698
slab class 5: chunk size 232 perslab 4519
slab class 6: chunk size 296 perslab 3542
slab class 7: chunk size 376 perslab 2788
slab class 8: chunk size 472 perslab 2221
slab class 9: chunk size 592 perslab 1771
slab class 10: chunk size 744 perslab 1409
Visible, Le facteur de rapport d'écart entre les groupes est 2 C'est beaucoup plus petit. , Mieux pour mettre en cache des centaines d'octets d'enregistrements . D'après les résultats ci - dessus, , On pourrait penser qu'il y a des erreurs de calcul , Ces erreurs sont délibérément définies pour maintenir l'alignement du nombre d'octets .
Oui.memcached Introduction du produit , Ou en utilisant directement les valeurs par défaut pour le déploiement , Il est préférable de recalculer la longueur moyenne prévue des données ,Ajustementgrowth factor, Pour obtenir le réglage le plus approprié . La mémoire est une ressource précieuse , C'est dommage de gaspiller. .
Voici comment utiliser memcachedDestatsVue des commandesslabs L'utilisation de l'information .
VoirmemcachedÉtat interne de
memcachedIl y en a un qui s'appellestatsOrdre de, Il permet d'obtenir une grande variété d'informations . Il y a beaucoup de façons d'exécuter une commande ,AvectelnetLe plus simple:
$ telnet Nom d'hôte Numéro de port
Connectez - vous àmemcachedAprès,EntréestatsAppuyez sur Entrée., Accès à une variété d'informations, y compris l'utilisation des ressources . En outre,Entrée"stats slabs"Ou"stats items" Vous pouvez également obtenir des informations sur les enregistrements mis en cache . Fin du programme Veuillez entrer quit.
Pour plus de détails sur ces commandes, voir memcached Dans le paquet protocol.txtDocumentation.
$ telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 481
STAT uptime 16574
STAT time 1213687612
STAT version 1.2.5
STAT pointer_size 32
STAT rusage_user 0.102297
STAT rusage_system 0.214317
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 6
STAT total_connections 8
STAT connection_structures 7
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT evictions 0
STAT bytes_read 20
STAT bytes_written 465
STAT limit_maxbytes 67108864
STAT threads 4
END
quit
En plus,Si installélibmemcachedCe visageC/C++Bibliothèque client pour la langue,Il va installer memstat Cette commande. La méthode d'utilisation est simple, Peut être obtenu en moins d'étapes telnetMême information, Vous pouvez également obtenir des informations de plusieurs serveurs à la fois .
$ memstat --servers=server1,server2,server3,...
libmemcached Disponible à l'adresse suivante: :
VoirslabsUtilisation de
Utilisermemcached La création Brad Écrit sous le nom de memcached-toolDePerlScript, Facilement accessible slabUtilisation de (Il vamemcached Les valeurs de retour sont organisées dans un format facile à lire ). Le script est disponible à l'adresse suivante :
C'est très simple. :
$ memcached-tool Nom d'hôte:Port Options
Voirslabs Aucune option n'est requise pour l'utilisation , Donc vous pouvez utiliser la commande suivante :
$ memcached-tool Nom d'hôte:Port
Les informations obtenues sont les suivantes: :
# Item_Size Max_age 1MB_pages Count Full?
1 104 B 1394292 s 1215 12249628 yes
2 136 B 1456795 s 52 400919 yes
3 176 B 1339587 s 33 196567 yes
4 224 B 1360926 s 109 510221 yes
5 280 B 1570071 s 49 183452 yes
6 352 B 1592051 s 77 229197 yes
7 440 B 1517732 s 66 157183 yes
8 552 B 1460821 s 62 117697 yes
9 696 B 1521917 s 143 215308 yes
10 872 B 1695035 s 205 246162 yes
11 1.1 kB 1681650 s 233 221968 yes
12 1.3 kB 1603363 s 241 183621 yes
13 1.7 kB 1634218 s 94 57197 yes
14 2.1 kB 1695038 s 75 36488 yes
15 2.6 kB 1747075 s 65 25203 yes
16 3.3 kB 1760661 s 78 24167 yes
Les colonnes ont la signification suivante: :
| Colonnes | Sens |
|---|---|
| # | slab classNo. |
| Item_Size | ChunkTaille |
| Max_age | LRU Durée de vie des enregistrements les plus anciens |
| 1MB_pages | Affectation àSlabNombre de pages |
| Count | Slab Nombre d'enregistrements en |
| Full? | Slab Y a - t - il des loisirs à l'intérieur? chunk |
Les informations obtenues à partir de ce script sont très pratiques pour le réglage ,L'utilisation de.
Résumé du stockage de la mémoire
C'est une brève explication. memcached Mécanisme de mise en cache et méthode de réglage . J'espère que les lecteurs comprendront memcached Le principe de gestion de la mémoire et ses avantages et inconvénients .
Les instructions se poursuivront la prochaine fois LRUEtExpirePrincipe d'équivalence,Etmemcached Les dernières tendances —— Système extensible (pluggable architecher)).
Navigation des articles de la série:
memcachedAnalyse complète–1. memcachedBase
memcachedAnalyse complète–2. Compris.memcachedStockage de mémoire pour
memcachedAnalyse complète–3. memcached Mécanisme de suppression et orientation du développement
memcachedAnalyse complète–4. memcachedAlgorithme distribué pour
memcachedAnalyse complète–5. memcached Applications et programmes compatibles pour
边栏推荐
- JUnit unit test
- Distributed basic concepts
- Learn to use a new technology quickly
- GDB debugging
- Self signed certificate generation
- DHCP operation
- Learn together and make progress together. Welcome to exchange
- Alibaba cloud lightweight servers open designated ports
- Call process of package receiving function
- Geek University cloud native training camp
猜你喜欢

DHCP operation

VirtualBox虚拟机安装Win10企业版

How Fiddler works

Tutorial on obtaining JD cookies by mobile browser

JMeter implementation specifies concurrent loop testing

What does virtualization mean? What technologies are included? What is the difference with private cloud?

Handwritten RPC the next day -- review of some knowledge

Football information query system based on C language course report + project source code + demo ppt+ project screenshot

Dynamic routing protocol rip, OSPF

The first day of handwritten RPC -- review of some basic knowledge
随机推荐
基于C语言实现的足球信息查询系统 课程报告+项目源码+演示PPT+项目截图
Learn to use a new technology quickly
After idea installs these plug-ins, the code can be written to heaven. My little sister also has to arrange it
Oauth1.0 introduction
Failed to open after installing Charles without any prompt
Postman assertion
It was Tencent who jumped out of the job with 26k. It really wiped my ass with sandpaper. It gave me a hand
网络安全审查办公室对知网启动网络安全审查
Simpledateformat thread unsafe
Go coding specification
What does virtualization mean? What technologies are included? What is the difference with private cloud?
Time standard and format
Appium desktop introduction
Poj1061 frog dating (extended Euclid)
Several common command operations in win system
After 5 months' test, it took 15K to come for an interview. When I asked, it was not worth even 5K. It was really
VirtualBox虚拟机安装Win10企业版
JMeter installation plug-in, adding [email protected] -Perfmon metric collector listener steps
Pytest testing framework
Power apps Guide