国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】cache不被釋放的幾種情況

這篇具有很好參考價值的文章主要介紹了【Linux】cache不被釋放的幾種情況。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

在Linux系統(tǒng)中,我們經(jīng)常用free命令來查看系統(tǒng)內(nèi)存的使用狀態(tài)。在一個RHEL6的系統(tǒng)上,free命令的顯示內(nèi)容大概是這樣一個狀態(tài):

[root@tencent64 ~]# free
             total       used       free     shared    buffers     cached
Mem:     132256952   72571772   59685180          0    1762632   53034704
-/+ buffers/cache:   17774436  114482516
Swap:      2101192        508    2100684

這里的默認顯示單位是kb,我的服務(wù)器是128G內(nèi)存,所以數(shù)字顯得比較大。這個命令幾乎是每一個使用過Linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越少(我是說比例越少)。一般情況下,對此命令輸出的理解可以分這幾個層次:

不了解。這樣的人的第一反應(yīng)是:天啊,內(nèi)存用了好多,70個多G,可是我?guī)缀鯖]有運行什么大程序???為什么會這樣?Linux好占內(nèi)存!

自以為很了解。這樣的人一般自習評估過會說:嗯,根據(jù)我專業(yè)的眼光看出來,內(nèi)存才用了17G左右,還有很多剩余內(nèi)存可用。buffers/cache占用的較多,說明系統(tǒng)中有進程曾經(jīng)讀寫過文件,但是不要緊,這部分內(nèi)存是當空閑來用的。

真的很了解。這種人的反應(yīng)反而讓人感覺最不懂Linux,他們的反應(yīng)是:free顯示的是這樣,好吧我知道了。神馬?你問我這些內(nèi)存夠不夠,我當然不知道啦!我特么怎么知道你程序怎么寫的?

根據(jù)目前網(wǎng)絡(luò)上技術(shù)文檔的內(nèi)容,我相信絕大多數(shù)了解一點Linux的人應(yīng)該處在第二種層次。大家普遍認為,buffers和cached所占用的內(nèi)存空間是可以在內(nèi)存壓力較大的時候被釋放當做空閑空間用的。但真的是這樣么?在論證這個題目之前,我們先簡要介紹一下buffers和cached是什么意思:

什么是buffer/cache?

buffer和cache是兩個在計算機技術(shù)中被用濫的名詞,放在不通語境下會有不同的意義。在Linux的內(nèi)存管理中,這里的buffer指Linux內(nèi)存的:Buffer cache。這里的cache指Linux內(nèi)存中的:Page cache。翻譯成中文可以叫做緩沖區(qū)緩存和頁面緩存。在歷史上,它們一個(buffer)被用來當成對io設(shè)備寫的緩存,而另一個(cache)被用來當作對io設(shè)備的讀緩存,這里的io設(shè)備,主要指的是塊設(shè)備文件和文件系統(tǒng)上的普通文件。但是現(xiàn)在,它們的意義已經(jīng)不一樣了。在當前的內(nèi)核中,page cache顧名思義就是針對內(nèi)存頁的緩存,說白了就是,如果有內(nèi)存是以page進行分配管理的,都可以使用page cache作為其緩存來管理使用。當然,不是所有的內(nèi)存都是以頁(page)進行管理的,也有很多是針對塊(block)進行管理的,這部分內(nèi)存使用如果要用到cache功能,則都集中到buffer cache中來使用。(從這個角度出發(fā),是不是buffer cache改名叫做block cache更好?)然而,也不是所有塊(block)都有固定長度,系統(tǒng)上塊的長度主要是根據(jù)所使用的塊設(shè)備決定的,而頁長度在X86上無論是32位還是64位都是4k。

明白了這兩套緩存系統(tǒng)的區(qū)別,就可以理解它們究竟都可以用來做什么了。

什么是page cache

Page cache主要用來作為文件系統(tǒng)上的文件數(shù)據(jù)的緩存來用,尤其是針對當進程對文件有read/write操作的時候。如果你仔細想想的話,作為可以映射文件到內(nèi)存的系統(tǒng)調(diào)用:mmap是不是很自然的也應(yīng)該用到page cache?在當前的系統(tǒng)實現(xiàn)里,page cache也被作為其它文件類型的緩存設(shè)備來用,所以事實上page cache也負責了大部分的塊設(shè)備文件的緩存工作。

什么是buffer cache

Buffer cache則主要是設(shè)計用來在系統(tǒng)對塊設(shè)備進行讀寫的時候,對塊進行數(shù)據(jù)緩存的系統(tǒng)來使用。這意味著某些對塊的操作會使用buffer cache進行緩存,比如我們在格式化文件系統(tǒng)的時候。一般情況下兩個緩存系統(tǒng)是一起配合使用的,比如當我們對一個文件進行寫操作的時候,page cache的內(nèi)容會被改變,而buffer cache則可以用來將page標記為不同的緩沖區(qū),并記錄是哪一個緩沖區(qū)被修改了。這樣,內(nèi)核在后續(xù)執(zhí)行臟數(shù)據(jù)的回寫(writeback)時,就不用將整個page寫回,而只需要寫回修改的部分即可。

如何回收cache?

Linux內(nèi)核會在內(nèi)存將要耗盡的時候,觸發(fā)內(nèi)存回收的工作,以便釋放出內(nèi)存給急需內(nèi)存的進程使用。一般情況下,這個操作中主要的內(nèi)存釋放都來自于對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內(nèi)存夠用的時候加快進程對文件的讀寫速度,那么在內(nèi)存壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關(guān)進程使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。

但是這種清緩存的工作也并不是沒有成本。理解cache是干什么的就可以明白清緩存必須保證cache中的數(shù)據(jù)跟對應(yīng)文件中的數(shù)據(jù)一致,才能對cache進行釋放。所以伴隨著cache清除的行為的,一般都是系統(tǒng)IO飆高。因為內(nèi)核要對比cache中的數(shù)據(jù)和對應(yīng)硬盤文件上的數(shù)據(jù)是否一致,如果不一致需要寫回,之后才能回收。

在系統(tǒng)中除了內(nèi)存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發(fā)緩存清除的操作:

[root@tencent64 ~]# cat /proc/sys/vm/drop_caches 

方法是:

echo 1 > /proc/sys/vm/drop_caches
當然,這個文件可以設(shè)置的值分別為1、2、3。它們所表示的含義為:echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。

echo 2 > /proc/sys/vm/drop_caches

表示清除回收slab分配器中的對象(包括目錄項緩存和inode緩存)。slab分配器是內(nèi)核中管理內(nèi)存的一種機制,其中很多緩存數(shù)據(jù)實現(xiàn)都是用的pagecache。

echo 3 > /proc/sys/vm/drop_caches

表示清除pagecache和slab分配器中的緩存對象。

cache都能被回收么?

我們分析了cache能被回收的情況,那么有沒有不能被回收的cache呢?當然有。我們先來看第一種情況:

tmpfs

大家知道Linux提供一種“臨時”文件系統(tǒng)叫做tmpfs,它可以將內(nèi)存的一部分空間拿來當做文件系統(tǒng)使用,使內(nèi)存空間可以當做目錄文件來用。現(xiàn)在絕大多數(shù)Linux系統(tǒng)都有一個叫做/dev/shm的tmpfs目錄,就是這樣一種存在。當然,我們也可以手工創(chuàng)建一個自己的tmpfs,方法如下:

[root@tencent64 ~]# mkdir /tmp/tmpfs
[root@tencent64 ~]# mount -t tmpfs -o size=20G none /tmp/tmpfs/

[root@tencent64 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             10325000   3529604   6270916  37% /
/dev/sda3             20646064   9595940  10001360  49% /usr/local
/dev/mapper/vg-data  103212320  26244284  71725156  27% /data
tmpfs                 66128476  14709004  51419472  23% /dev/shm
none                  20971520         0  20971520   0% /tmp/tmpfs

于是我們就創(chuàng)建了一個新的tmpfs,空間是20G,我們可以在/tmp/tmpfs中創(chuàng)建一個20G以內(nèi)的文件。如果我們創(chuàng)建的文件實際占用的空間是內(nèi)存的話,那么這些數(shù)據(jù)應(yīng)該占用內(nèi)存空間的什么部分呢?根據(jù)pagecache的實現(xiàn)功能可以理解,既然是某種文件系統(tǒng),那么自然該使用pagecache的空間來管理。我們試試是不是這樣?

[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         36         89          0          1         19
-/+ buffers/cache:         15        111
Swap:            2          0          2
[root@tencent64 ~]# dd if=/dev/zero of=/tmp/tmpfs/testfile bs=1G count=13
13+0 records in
13+0 records out
13958643712 bytes (14 GB) copied, 9.49858 s, 1.5 GB/s
[root@tencent64 ~]# 
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         49         76          0          1         32
-/+ buffers/cache:         15        110
Swap:            2          0          2

我們在tmpfs目錄下創(chuàng)建了一個13G的文件,并通過前后free命令的對比發(fā)現(xiàn),cached增長了13G,說明這個文件確實放在了內(nèi)存里并且內(nèi)核使用的是cache作為存儲。再看看我們關(guān)心的指標:-/+ buffers/cache那一行。我們發(fā)現(xiàn),在這種情況下free命令仍然提示我們有110G內(nèi)存可用,但是真的有這么多么?我們可以人工觸發(fā)內(nèi)存回收看看現(xiàn)在到底能回收多少內(nèi)存:

[root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         43         82          0          0         29
-/+ buffers/cache:         14        111
Swap:            2          0          2

可以看到,cached占用的空間并沒有像我們想象的那樣完全被釋放,其中13G的空間仍然被/tmp/tmpfs中的文件占用的。當然,我的系統(tǒng)中還有其他不可釋放的cache占用著其余16G內(nèi)存空間。那么tmpfs占用的cache空間什么時候會被釋放呢?是在其文件被刪除的時候.如果不刪除文件,無論內(nèi)存耗盡到什么程度,內(nèi)核都不會自動幫你把tmpfs中的文件刪除來釋放cache空間。

[root@tencent64 ~]# rm /tmp/tmpfs/testfile 
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         30         95          0          0         16
-/+ buffers/cache:         14        111
Swap:            2          0          2

這是我們分析的第一種cache不能被回收的情況。還有其他情況,比如:

共享內(nèi)存

共享內(nèi)存是系統(tǒng)提供給我們的一種常用的進程間通信(IPC)方式,但是這種通信方式不能在shell中申請和使用,所以我們需要一個簡單的測試程序,代碼如下:

[root@tencent64 ~]# cat shm.c 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>

#define MEMSIZE 2048*1024*1023

int
main()
{
    int shmid;
    char *ptr;
    pid_t pid;
    struct shmid_ds buf;
    int ret;

    shmid = shmget(IPC_PRIVATE, MEMSIZE, 0600);
    if (shmid<0) {
        perror("shmget()");
        exit(1);
    }
     
    ret = shmctl(shmid, IPC_STAT, &buf);
    if (ret < 0) {
        perror("shmctl()");
        exit(1);
    }
     
    printf("shmid: %d\n", shmid);
    printf("shmsize: %d\n", buf.shm_segsz);
     
    buf.shm_segsz *= 2;
     
    ret = shmctl(shmid, IPC_SET, &buf);
    if (ret < 0) {
        perror("shmctl()");
        exit(1);
    }
     
    ret = shmctl(shmid, IPC_SET, &buf);
    if (ret < 0) {
        perror("shmctl()");
        exit(1);
    }
     
    printf("shmid: %d\n", shmid);
    printf("shmsize: %d\n", buf.shm_segsz);

 

    pid = fork();
    if (pid<0) {
        perror("fork()");
        exit(1);
    }
    if (pid==0) {
        ptr = shmat(shmid, NULL, 0);
        if (ptr==(void*)-1) {
            perror("shmat()");
            exit(1);
        }
        bzero(ptr, MEMSIZE);
        strcpy(ptr, "Hello!");
        exit(0);
    } else {
        wait(NULL);
        ptr = shmat(shmid, NULL, 0);
        if (ptr==(void*)-1) {
            perror("shmat()");
            exit(1);
        }
        puts(ptr);
        exit(0);
    }
}

程序功能很簡單,就是申請一段不到2G共享內(nèi)存,然后打開一個子進程對這段共享內(nèi)存做一個初始化操作,父進程等子進程初始化完之后輸出一下共享內(nèi)存的內(nèi)容,然后退出。但是退出之前并沒有刪除這段共享內(nèi)存。我們來看看這個程序執(zhí)行前后的內(nèi)存使用:

[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         30         95          0          0         16
-/+ buffers/cache:         14        111
Swap:            2          0          2
[root@tencent64 ~]# ./shm 
shmid: 294918
shmsize: 2145386496
shmid: 294918
shmsize: -4194304
Hello!
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         32         93          0          0         18
-/+ buffers/cache:         14        111
Swap:            2          0          2
# cached空間由16G漲到了18G。那么這段cache能被回收么?繼續(xù)測試:

[root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         32         93          0          0         18
-/+ buffers/cache:         14        111
Swap:            2          0          2

結(jié)果是仍然不可回收。大家可以觀察到,這段共享內(nèi)存即使沒人使用,仍然會長期存放在cache中,直到其被刪除。刪除方法有兩種,一種是程序中使用shmctl()去IPC_RMID,另一種是使用ipcrm命令。我們來刪除試試:

[root@tencent64 ~]# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00005feb 0          root       666        12000      4                       
0x00005fe7 32769      root       666        524288     2                       
0x00005fe8 65538      root       666        2097152    2                       
0x00038c0e 131075     root       777        2072       1                       
0x00038c14 163844     root       777        5603392    0                       
0x00038c09 196613     root       777        221248     0                       
0x00000000 294918     root       600        2145386496 0                       

[root@tencent64 ~]# ipcrm -m 294918
[root@tencent64 ~]# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00005feb 0          root       666        12000      4                       
0x00005fe7 32769      root       666        524288     2                       
0x00005fe8 65538      root       666        2097152    2                       
0x00038c0e 131075     root       777        2072       1                       
0x00038c14 163844     root       777        5603392    0                       
0x00038c09 196613     root       777        221248     0                       

[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         30         95          0          0         16
-/+ buffers/cache:         14        111
Swap:            2          0          2

刪除共享內(nèi)存后,cache被正常釋放了。這個行為與tmpfs的邏輯類似。內(nèi)核底層在實現(xiàn)共享內(nèi)存(shm)、消息隊列(msg)和信號量數(shù)組(sem)這些POSIX:XSI的IPC機制的內(nèi)存存儲時,使用的都是tmpfs。這也是為什么共享內(nèi)存的操作邏輯與tmpfs類似的原因。當然,一般情況下是shm占用的內(nèi)存更多,所以我們在此重點強調(diào)共享內(nèi)存的使用。說到共享內(nèi)存,Linux還給我們提供了另外一種共享內(nèi)存的方法mmap。

mmap

mmap()是一個非常重要的系統(tǒng)調(diào)用,這僅從mmap本身的功能描述上是看不出來的。從字面上看,mmap就是將一個文件映射進進程的虛擬內(nèi)存地址,之后就可以通過操作內(nèi)存的方式對文件的內(nèi)容進行操作。但是實際上這個調(diào)用的用途是很廣泛的。當malloc申請內(nèi)存時,小段內(nèi)存內(nèi)核使用sbrk處理,而大段內(nèi)存就會使用mmap。當系統(tǒng)調(diào)用exec族函數(shù)執(zhí)行時,因為其本質(zhì)上是將一個可執(zhí)行文件加載到內(nèi)存執(zhí)行,所以內(nèi)核很自然的就可以使用mmap方式進行處理。我們在此僅僅考慮一種情況,就是使用mmap進行共享內(nèi)存的申請時,會不會跟shmget()一樣也使用cache?

同樣,我們也需要一個簡單的測試程序:

[root@tencent64 ~]# cat mmap.c 
#include <stdlib.h>
#include <stdio.h>
#include <strings.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

#define MEMSIZE 1024*1024*1023*2
#define MPFILE "./mmapfile"

int main()
{
 void *ptr;
 int fd;

 fd = open(MPFILE, O_RDWR);
 if (fd < 0) {
  perror("open()");
  exit(1);
 }

 ptr = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, fd, 0);
 if (ptr == NULL) {
  perror("malloc()");
  exit(1);
 }

 printf("%p\n", ptr);
 bzero(ptr, MEMSIZE);

 sleep(100);

 munmap(ptr, MEMSIZE);
 close(fd);

 exit(1);
}

這次我們干脆不用什么父子進程的方式了,就一個進程,申請一段2G的mmap共享內(nèi)存,然后初始化這段空間之后等待100秒,再解除影射所以我們需要在它sleep這100秒內(nèi)檢查我們的系統(tǒng)內(nèi)存使用,看看它用的是什么空間?當然在這之前要先創(chuàng)建一個2G的文件./mmapfile。結(jié)果如下:

[root@tencent64 ~]# dd if=/dev/zero of=mmapfile bs=1G count=2
[root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         30         95          0          0         16
-/+ buffers/cache:         14        111
Swap:            2          0          2

然后執(zhí)行測試程序:

[root@tencent64 ~]# ./mmap &
[1] 19157
0x7f1ae3635000
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         32         93          0          0         18
-/+ buffers/cache:         14        111
Swap:            2          0          2

[root@tencent64 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         32         93          0          0         18
-/+ buffers/cache:         14        111
Swap:            2          0          2

我們可以看到,在程序執(zhí)行期間,cached一直為18G,比之前漲了2G,并且此時這段cache仍然無法被回收。然后我們等待100秒之后程序結(jié)束。

[root@tencent64 ~]# 
[1]+  Exit 1                  ./mmap
[root@tencent64 ~]# 
[root@tencent64 ~]# free -g
             total       used       free     shared    buffers     cached
Mem:           126         30         95          0          0         16
-/+ buffers/cache:         14        111
Swap:            2          0          2

程序退出之后,cached占用的空間被釋放。這樣我們可以看到,使用mmap申請標志狀態(tài)為MAP_SHARED的內(nèi)存,內(nèi)核也是使用的cache進行存儲的。在進程對相關(guān)內(nèi)存沒有釋放之前,這段cache也是不能被正常釋放的。實際上,mmap的MAP_SHARED方式申請的內(nèi)存,在內(nèi)核中也是由tmpfs實現(xiàn)的。由此我們也可以推測,由于共享庫的只讀部分在內(nèi)存中都是以mmap的MAP_SHARED方式進行管理,實際上它們也都是要占用cache且無法被釋放的。

最后

我們通過三個測試例子,發(fā)現(xiàn)Linux系統(tǒng)內(nèi)存中的cache并不是在所有情況下都能被釋放當做空閑空間用的。并且也也明確了,即使可以釋放cache,也并不是對系統(tǒng)來說沒有成本的??偨Y(jié)一下要點,我們應(yīng)該記得這樣幾點:

  • 當cache作為文件緩存被釋放的時候會引發(fā)IO變高,這是cache加快文件訪問速度所要付出的成本。

  • tmpfs中存儲的文件會占用cache空間,除非文件刪除否則這個cache不會被自動釋放。

  • 使用shmget方式申請的共享內(nèi)存會占用cache空間,除非共享內(nèi)存被ipcrm或者使用shmctl去IPC_RMID,否則相關(guān)的cache空間都不會被自動釋放。

  • 使用mmap方法申請的MAP_SHARED標志的內(nèi)存會占用cache空間,除非進程將這段內(nèi)存munmap,否則相關(guān)的cache空間都不會被自動釋放。

實際上shmget、mmap的共享內(nèi)存,在內(nèi)核層都是通過tmpfs實現(xiàn)的,tmpfs實現(xiàn)的存儲用的都是cache。

當理解了這些的時候,希望大家對free命令的理解可以達到我們說的第三個層次。我們應(yīng)該明白,內(nèi)存的使用并不是簡單的概念,cache也并不是真的可以當成空閑空間用的。如果我們要真正深刻理解你的系統(tǒng)上的內(nèi)存到底使用的是否合理,是需要理解清楚很多更細節(jié)知識,并且對相關(guān)業(yè)務(wù)的實現(xiàn)做更細節(jié)判斷的。我們當前實驗場景是Centos 6的環(huán)境,不同版本的Linux的free現(xiàn)實的狀態(tài)可能不一樣,大家可以自己去找出不同的原因。

當然,本文所述的也不是所有的cache不能被釋放的情形。那么,在你的應(yīng)用場景下,還有那些cache不能被釋放的場景呢?

原文鏈接:https://blog.csdn.net/m0_71777195/article/details/128325248文章來源地址http://www.zghlxwxcb.cn/news/detail-495337.html

到了這里,關(guān)于【Linux】cache不被釋放的幾種情況的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 一文教會你Linux 查看內(nèi)存使用情況的幾種方法

    一文教會你Linux 查看內(nèi)存使用情況的幾種方法

    在運行 Linux 系統(tǒng)的過程中為了讓電腦或者服務(wù)器以最佳水平運行,常常需要監(jiān)控內(nèi)存統(tǒng)計信息。 那么今天我們就來看看有哪些方法可以訪問所有相關(guān)信息并幫助管理員監(jiān)控內(nèi)存統(tǒng)計信息。 查看或者獲取 Linux 中的內(nèi)存使用情況既可以通過命令的方式,也可以通過桌面端的GU

    2024年02月10日
    瀏覽(27)
  • iPortal內(nèi)置Elasticsearch啟動失敗的幾種情況——Linux

    iPortal內(nèi)置Elasticsearch啟動失敗的幾種情況——Linux

    作者:yx 在Linux環(huán)境啟動iPortal后有時會出現(xiàn)搜索異常的情況,如下截圖,這是因為Elasticsearch(以下簡稱“ES”)沒啟動成功導致的,支持過程中常遇到有三種情況導致ES啟動失敗的原因,一起來看看吧! 從幫助文檔可以得知,啟動內(nèi)置的搜索服務(wù)時相關(guān)端口有這些: 如果使用

    2024年01月16日
    瀏覽(30)
  • 關(guān)于load過高的幾種情況

    Linux 中 load啥意思 \\\"Load\\\" 在 Linux 系統(tǒng)中通常是指系統(tǒng)的負載情況,也稱為系統(tǒng)負荷。它指的是系統(tǒng)正在運行的進程數(shù)量以及這些進程對系統(tǒng)資源的使用情況,例如 CPU、內(nèi)存、磁盤 I/O 等。Linux 系統(tǒng)的負載通常由三個數(shù)字表示,分別對應(yīng)于過去 1 分鐘、5 分鐘和 15 分鐘內(nèi)的平均

    2024年02月10日
    瀏覽(41)
  • JS中內(nèi)存泄漏的幾種情況

    JavaScript 中的內(nèi)存泄漏是指程序中使用的內(nèi)存不再被需要卻沒有被釋放,最終導致瀏覽器或者 Node.js 進程使用的內(nèi)存越來越大,直到程序崩潰或者系統(tǒng)運行緩慢。 在 JavaScript 中,內(nèi)存泄漏通常是由于變量、對象、閉包、事件監(jiān)聽器等長期存在而沒有被釋放引起的。這些長期存

    2024年02月03日
    瀏覽(21)
  • 避坑:.NET內(nèi)存泄露的幾種情況

    內(nèi)存“泄露”是開發(fā)中常見的問題之一,它會導致應(yīng)用程序占用越來越多的內(nèi)存資源,最終可能導致系統(tǒng)性能下降甚至崩潰。軟件開發(fā)者需要了解在程序中出現(xiàn)內(nèi)存泄露的情況,以避免軟件出現(xiàn)該的問題。 什么是內(nèi)存“泄露”? 內(nèi)存泄露是申請了內(nèi)存空間的變量一直在占用

    2024年02月11日
    瀏覽(27)
  • 詳解MySQL索引失效的幾種情況

    詳解MySQL索引失效的幾種情況

    MySQL索引是提高查詢效率的重要手段。索引失效會導致查詢效率下降,甚至全表掃描,影響數(shù)據(jù)庫性能。以下是可能導致MySQL索引失效的情況: 當where語句中使用 or 操作符并且 or 兩邊的條件涉及到至少兩個字段時,MySQL無法使用索引,會轉(zhuǎn)向全表掃描。因此,應(yīng)盡量避免使用

    2024年02月01日
    瀏覽(21)
  • 時間狀語前不用介詞的幾種情況

    1. today,yesterday, tomorrow,tonight, yesterday/tomorrow morning(evening, afternoon),today week (下周的今天) there is a football game tomorrow morning. 2. 表示時間的短語里面有next, last, one, this,these,those,every,each,some,any,all等單詞,介詞應(yīng)該省略。 i will see you next week. you can come any days you want. 你哪天來都可以

    2023年04月09日
    瀏覽(18)
  • 面試官:講講MySql索引失效的幾種情況

    拓展:Alibaba《Java開發(fā)手冊》 【強制】頁面搜索嚴禁左模糊或者全模糊,如果需要請走搜索引擎來解決。 注意: 當數(shù)據(jù)庫中的數(shù)據(jù)的索引列的 NULL值達到比較高的比例的時候 ,即使在IS NOT NULL 的情況下 MySQL的查詢優(yōu)化器會選擇使用索引, 此時type的值是range(范圍查詢) 測試

    2024年02月11日
    瀏覽(26)
  • sql數(shù)據(jù)庫去重的幾種情況

    sql數(shù)據(jù)庫去重的幾種情況

    本文主要總結(jié)數(shù)據(jù)庫去掉重復數(shù)據(jù)的方法 去掉重復數(shù)據(jù)的方法: 第一種:distinct 根據(jù)單個字段去重,能精確去重; 作用在多個字段時,只有當這幾個字段的完全相同時,才能去重; distinct只能放在SQL語句中的第一個,才會起作用 上圖舉例說明:圖中student_name 為 tes

    2024年02月12日
    瀏覽(22)
  • Linux開機自動掛載文件系統(tǒng)的幾種方式

    在Digitalocean上,給主機添加硬盤時,為了免去分區(qū)、格式化、掛載等麻煩,可以選擇讓運營商幫忙自動完成以上操作。 查看文檔可知,運營商在添加硬盤時,在掛載階段自動執(zhí)行了以下腳本: 1). 創(chuàng)建掛載目錄。 mkdir -p /mnt/volume 2). 掛載硬盤(臨時掛載,主機重啟后失效)。

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包