nginx sendfile 参数解释
sendfile
现在流行的web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile是什么,怎么影响性能的呢?sendfile实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用。先来看一下不用 sendfile的传统网络传输过程:
read(file,tmp_buf, len);
write(socket,tmp_buf, len);
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
一般来说一个网络应用是通过读硬盘数据,然后写数据到socket 来完成网络传输的。上面2行用代码解释了这一点,不过上面2行简单的代码掩盖了底层的很多操作。来看看底层是怎么执行上面2行代码的:
1、系统调用 read()产生一个上下文切换:从 user mode 切换到 kernel mode,然后 DMA 执行拷贝,把文件数据从硬盘读到一个 kernel buffer 里。
2、数据从 kernel buffer拷贝到 user buffer,然后系统调用 read() 返回,这时又产生一个上下文切换:从kernel mode 切换到 user mode。
3、 系统调用write()产生一个上下文切换:从 user mode切换到 kernel mode,然后把步骤2读到 user buffer的数据拷贝到 kernel buffer(数据第2次拷贝到 kernel buffer),不过这次是个不同的 kernel buffer,这个 buffer和 socket相关联。
4、系统调用 write()返回,产生一个上下文切换:从 kernel mode 切换到 user mode(第4次切换了),然后 DMA 从 kernel buffer拷贝数据到协议栈(第4次拷贝了)。
上面4个步骤有4次上下文切换,有4次拷贝,我们发现如果能减少切换次数和拷贝次数将会有效提升性能。在kernel2.0+ 版本中,系统调用 sendfile() 就是用来简化上面步骤提升性能的。sendfile() 不但能减少切换次数而且还能减少拷贝次数。
再来看一下用 sendfile()来进行网络传输的过程:
sendfile(socket,file, len);
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
1、 系统调用sendfile()通过 DMA把硬盘数据拷贝到 kernel buffer,然后数据被 kernel直接拷贝到另外一个与 socket相关的 kernel buffer。这里没有 user mode和 kernel mode之间的切换,在 kernel中直接完成了从一个 buffer到另一个 buffer的拷贝。
2、DMA 把数据从 kernelbuffer 直接拷贝给协议栈,没有切换,也不需要数据从 user mode 拷贝到 kernel mode,因为数据就在 kernel 里。
文章参考:http://www.th7.cn/system/lin/201306/41314.shtml
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了nginx sendfile 参数解释,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Kernelsecuritycheckfailure (échec de la vérification du noyau) est un type de code d'arrêt relativement courant. Cependant, quelle qu'en soit la raison, l'erreur d'écran bleu rend de nombreux utilisateurs très angoissés. Laissez ce site présenter soigneusement 17 types de solutions aux utilisateurs. 17 solutions à l'écran bleu kernel_security_check_failure Méthode 1 : Supprimer tous les périphériques externes Lorsqu'un périphérique externe que vous utilisez est incompatible avec votre version de Windows, l'erreur d'écran bleu Kernelsecuritycheckfailure peut se produire. Pour ce faire, vous devez débrancher tous les périphériques externes avant d'essayer de redémarrer votre ordinateur.

Le noyau Linux signifie le noyau Linux, qui fonctionne principalement pour compléter la gestion des périphériques du pilote IO, TCP/IP et la planification des tâches ; le noyau Linux est le composant principal du système d'exploitation Linux et l'interface principale entre le matériel informatique et ses processus. communications et gérer les ressources le plus efficacement possible.

Dans Docker, le problème d'autorisation du répertoire de montage peut généralement être résolu par la méthode suivante : ajout d'options liées aux autorisations lors de l'utilisation du paramètre -v pour spécifier le répertoire de montage. Vous pouvez spécifier les autorisations du répertoire monté en ajoutant : ro ou :rw après le répertoire monté, indiquant respectivement les autorisations en lecture seule et en lecture-écriture. Par exemple : dockerrun-v/host/path:/container/path:roimage_name Définissez la directive USER dans le Dockerfile pour spécifier l'utilisateur qui s'exécute dans le conteneur afin de garantir que les opérations à l'intérieur du conteneur sont conformes aux exigences d'autorisation. Par exemple : FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

Comme nous le savons tous, Linux ne prend pas bien en charge la concurrence élevée avec les paramètres par défaut, qui sont principalement limités par la limite du nombre maximum de fichiers ouverts dans un seul processus, les paramètres TCP du noyau et le mécanisme de distribution des événements IO. Voici quelques ajustements pour que le système Linux prenne en charge un environnement à haute concurrence.

1. Concept d'utilisation de JavaNIOBuffers pour interagir avec NIOChannel. Lire les données du canal vers les tampons et écrire les données du tampon vers les canaux ; les trois propriétés du tampon doivent être contrôlées, à savoir la capacité, la position-emplacement et la limite. 2. Instance publicstaticvoidmain(String[]args){//Générer un tampon d'une longueur de 10IntBufferintBuffer=IntBuffer.allocate(10);for(inti=0;i

À la fin de l'année dernière, la version 255 du service de gestion de système Linux systemd a reçu la possibilité d'afficher des messages d'erreur de style Blue Screen of Death (BSOD) en mode plein écran. Cependant, cette solution ne fonctionne pas pour les erreurs du noyau, donc le prochain

Basée sur la source gratuite de Red Hat Enterprise Linux 7, la branche CentOS 7 hérite de la fonctionnalité permettant de toujours obtenir les dernières mises à jour de sécurité du noyau. Aujourd'hui, l'équipe système a publié un correctif très important pour corriger rapidement quatre vulnérabilités récemment découvertes et a recommandé aux utilisateurs d'installer le correctif dès que possible et de mettre à niveau vers le noyau-3.10.0-514.10.2.el7. Selon l'avis de sécurité RHSA-2017:0386-1, l'une des vulnérabilités corrigées par ce correctif du noyau est le déploiement de LinuxKernelKVM (Kernel-basedVirtualMachine) (CVE-2016-8630), lorsque des instructions non définies sont exécutées et simulées.

Utilisation de Buffer pour les opérations de flux d'E/S Outre NIO, il existe deux méthodes de base pour utiliser Java pour effectuer des opérations d'E/S : utiliser des méthodes basées sur InputStream et OutputStream (flux d'octets) à l'aide de Writer et Reader ; (Flux de caractères) Quelle que soit la méthode utilisée pour les E/S de fichiers, si la mise en mémoire tampon peut être utilisée de manière raisonnable, les performances d'E/S peuvent être efficacement améliorées.
