如何找到Linux系统的虚拟内存大小和缓存大小?


11

是否有任何命令可以获取Linux系统的虚拟内存大小,缓存大小和前端总线速度?Linux中的交换与虚拟内存相同吗?


2
交换==虚拟内存
Joakim Elofsson

请提供您的CPU规格。从系统启动时打开BIOS,以确定CPU的FSB。或者只是谷歌您的CPU的模型。如果您有台式PC,则可以打开机箱并直接查看cpu以找到型号。
Jonno_FTW

5
不,交换和虚拟内存完全不同。例如,映射1GB文件的内存使用了额外的1GB虚拟内存,但是交换的使用没有变化。交换是后备存储的一种形式。虚拟内存的许多用途与后备存储无关。(并且存在具有虚拟内存且没有交换的系统以及具有交换但没有虚拟内存的系统。)
David Schwartz

虚拟内存=物理内存+交换空间
Pratik Khadloya

Answers:


11

这个问题完全包含在您先前的问题中。如何找到Linux系统的虚拟内存大小和缓存大小?。正如对这个问题的回答所指出的那样,该sudo dmidecode --type processor命令为您提供“外部时钟”速度,而FSB速度是该速度的倍数(通常为2或4倍)。

如果这对您不起作用,则应编辑原始问题,并告诉我们您得到了什么输出或错误是什么。您越具体,其他人就能为您提供更好的帮助。

正如《 The Journeyman》极客所指出的那样,通常可以从lshwcpu相关输出中为“ clock”报告的值中,从中获得相同的“ External Clock”度量。

 *-cpu
      description: CPU
      product: Genuine Intel(R) CPU           T2300  @ 1.66GHz
      vendor: Intel Corp.
      physical id: 400
      bus info: cpu@0
      version: 6.14.8
      serial: 0000-06E8-0000-0000-0000-0000
      slot: Microprocessor
      size: 1GHz
      capacity: 1800MHz
      width: 32 bits
      clock: 133MHz
      capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts pni monitor est tm2 xtpr pdcm cpufreq
      configuration: id=0

最后,您可能会在的输出中找到外部时钟速度dmesg,尽管这绝不是访问此信息的标准方法。您可以通过BIOS设置或查找CPU规格来找到FSB速度,尽管这些并非特定于Linux。


dmidecode仅适用于x86。ARM处理器没有该命令,并且经常返回无用的值,例如不正确的BogMIPS。
jww

1
我对如何接受这件事感到有些困惑。看起来它只能回答部分问题
Gi0rgi0s

为什么这是公认的答案?它没有说明如何确定虚拟内存大小。
jww

10

是的,交换是虚拟内存。

虚拟内存大小 使用swapon -sfree

$ swapon -s
Filename                Type        Size    Used    Priority
/dev/sda6                               partition   1004020 39620   -1

$ free
             total       used       free     shared    buffers     cached
Mem:       3087892    2879036     208856          0     394288     835052
-/+ buffers/cache:    1649696    1438196
Swap:      1004020      39620     964400

缓存大小/ proc / cpuinfo获取。“ 缓存大小 ”字段为您提供了CPU上的缓存。在多核计算机上,您将看到每个处理器一个条目,以及它自己的缓存值。

$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 14
model name  : Genuine Intel(R) CPU           T2300  @ 1.66GHz
stepping    : 8
cpu MHz     : 1000.000
cache size  : 2048 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 10
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts pni monitor est tm2 xtpr pdcm
bogomips    : 3324.64
clflush size    : 64
power management:

前端总线(FSB)速度 可以使用--type处理器参数从dmidecode实用程序中获得该速度。您需要sudo权限才能运行此命令。FSB由“ 外部时钟 ” 报告的速度指示。实际速度通常是报告速度的4倍,因为每个时钟周期都会执行许多指令。

$ sudo dmidecode --type processor
# dmidecode 2.9
SMBIOS 2.4 present.

Handle 0x0400, DMI type 4, 32 bytes
Processor Information

Socket Designation: Microprocessor
Type: Central Processor
Family: Pentium M
Manufacturer: Intel
ID: E8 06 00 00 FF FB E9 BF
Signature: Type 0, Family 6, Model 14, Stepping 8
Flags:
    FPU (Floating-point unit on-chip)
    VME (Virtual mode extension)
    DE (Debugging extension)
    PSE (Page size extension)
    TSC (Time stamp counter)
    MSR (Model specific registers)
    PAE (Physical address extension)
    MCE (Machine check exception)
    CX8 (CMPXCHG8 instruction supported)
    APIC (On-chip APIC hardware supported)
    SEP (Fast system call)
    MTRR (Memory type range registers)
    PGE (Page global enable)
    MCA (Machine check architecture)
    CMOV (Conditional move instruction supported)
    PAT (Page attribute table)
    CLFSH (CLFLUSH instruction supported)
    DS (Debug store)
    ACPI (ACPI supported)
    MMX (MMX technology supported)
    FXSR (Fast floating-point save and restore)
    SSE (Streaming SIMD extensions)
    SSE2 (Streaming SIMD extensions 2)
    SS (Self-snoop)
    HTT (Hyper-threading technology)
    TM (Thermal monitor supported)
    PBE (Pending break enabled)
Version: Not Specified
Voltage: 3.3 V
External Clock: 133 MHz
Max Speed: 1800 MHz
Current Speed: 1000 MHz
Status: Populated, Enabled
Upgrade: None
L1 Cache Handle: 0x0700
L2 Cache Handle: 0x0701
L3 Cache Handle: Not Provided

我有Linux,它没有dmidecode / lshw命令
菠萝

您正在运行哪个发行版?

另外,您是否具有sudo访问权限以在计算机上运行这些命令?

swapon -s输出格式现已弃用。而是使用swapon --show
Waruna Ranasinghe,

3

我确实相信lshw有该信息。但是,并非所有发行版都有它(提示-下次请提及您使用的发行版和版本。这很有帮助。也有助于具体说明您到目前为止所做的事情。“某些命令之类的”还不够好)


3

在Linux机器上尝试以下操作: cat /proc/pal/cpu0/cache_info

这将显示如下内容:

Cache levels  : 3
Unique caches : 5

Data Cache level 1:
        Size           : 16384 bytes
        Attributes     : WriteThrough
        Associativity  : 4
        Line size      : 64 bytes
        Stride         : 128 bytes
        Store latency  : 0 cycle(s)
        Load latency   : 1 cycle(s)
        Store hints    :
        Load hints     : [Temporal, level 1]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 12
        Tag MSB        : 49
Instruction Cache level 1:
        Size           : 16384 bytes
        Attributes     :
        Associativity  : 4
        Line size      : 64 bytes
        Stride         : 128 bytes
        Store latency  : N/A
        Load latency   : 1 cycle(s)
        Store hints    :
        Load hints     : [Temporal, level 1]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 12
        Tag MSB        : 49
Data Cache level 2:
        Size           : 262144 bytes
        Attributes     : WriteBack
        Associativity  : 8
        Line size      : 128 bytes
        Stride         : 128 bytes
        Store latency  : 7 cycle(s)
        Load latency   : 5 cycle(s)
        Store hints    : [Temporal, level 1][Non-temporal, all levels]
        Load hints     : [Temporal, level 1][Non-temporal, level 1][Non-temporal, all levels]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 15
        Tag MSB        : 49
Instruction Cache level 2:
        Size           : 524288 bytes
        Attributes     :
        Associativity  : 8
        Line size      : 128 bytes
        Stride         : 128 bytes
        Store latency  : N/A
        Load latency   : 7 cycle(s)
        Store hints    :
        Load hints     : [Temporal, level 1][Non-temporal, level 1][Non-temporal, all levels]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 16
        Tag MSB        : 49
Data/Instruction Cache level 3:
        Size           : 4194304 bytes
        Attributes     : Unified WriteBack
        Associativity  : 8
        Line size      : 128 bytes
        Stride         : 128 bytes
        Store latency  : 7 cycle(s)
        Load latency   : 14 cycle(s)
        Store hints    : [Temporal, level 1]
        Load hints     : [Temporal, level 1][Non-temporal, level 1]
        Alias boundary : 4096 byte(s)
        Tag LSB        : 19
        Tag MSB        : 49

3

试试看ulimit -a,在我的机器上它将显示类似以下内容:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31321
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31321
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

free在我的机器上运行,结果是这样的:

             total       used       free     shared    buffers     cached
Mem:       4024900     606472    3418428          0      85768     366980
-/+ buffers/cache:     153724    3871176
Swap:      3998716          0    3998716

我编写了以下代码来测试一个进程可以创建多少个线程:

#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
using namespace std;

#define MAX_THREAD_NUM 1100
void * threadTest(void* arg){
        while(true){
                sleep(5);
        }
        pthread_exit(NULL);
}

int main(){
        for(int i = 0;i< MAX_THREAD_NUM;i++){
                pthread_t tid;
                cout<<"create thread "<< i <<"... "<<endl;
                int ret = pthread_create(&tid,NULL,&threadTest,NULL);
                if(ret !=0){
                        perror("pthread_create error");
                }
                pthread_detach(tid);
        }
        while(true){
                sleep(5);
        }
        return 0;

}

结果是这样的:

create thread 378...
create thread 379...
create thread 380...
create thread 381...
create thread 382...
pthread_create error: Cannot allocate memory
create thread 383...
pthread_create error: Cannot allocate memory
create thread 384...
pthread_create error: Cannot allocate memory
create thread 385...
pthread_create error: Cannot allocate memory
create thread 386...
pthread_create error: Cannot allocate memory

2

虚拟机

vmstat报告报告虚拟内存统计信息,其中包含有关进程,交换,空闲,缓冲和缓存内存,调页空间,磁盘IO活动,陷阱,中断,上下文切换和CPU活动的信息。使用vmstat命令,管理员可以拥有有关内存使用情况的即时报告。

vmstat的语法

vmstat -[options] [delay count]

vmstat的用法示例

vmstat

这里找到


1起,比我的解决方案好:D,提供更多信息
monkey_p

2

“ free”命令将向您显示内存利用率,包括实际使用的内存与缓冲区/缓存中的内存使用情况。

    # free
             total       used       free     shared    buffers     cached
Mem:       3896252    3779044     117208          0      65788    1363972
-/+ buffers/cache:    2349284    1546968
Swap:      2097144     886836    1210308

“ dmidecode”命令可能使您对FSB速度有所了解。


0
swapon -s

已使用字段将指示当前正在使用的数量

Filename      Type           Size       Used    Priority
/dev/sda5     partition      859436     0       -1

-1

页面大小 :

$ getconf PAGESIZE

(要么)

$ getconf PAGE_SIZE

尝试

swapinfo or swapinfo -a 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.