VMWare中处理器和内存配置含义

VMWare中处理器和内存配置含义,第1张

背景

    在创建虚拟机系统后,默认处理器配置都是为1,内存一般选为1G,然而在使用Linux系统编译大型软件时,速度慢耗时较长,这时候就需要调整一下处理器和内存配置,使得计算机性能充分发挥,下面说明VMWare中处理器和内存配置含义。

处理器

    处理器数量:表示计算机CPU有几个核core,当CPU内部 >= 2个core时这里才能进行选择。比如我的笔记本是小米AIR,CPU是I7 8550U,4核8线程,那么这里可选择1/2/4。

    每个处理器的核心数量:表示单个core的线程数,一般情况下单个core对应2个线程,所以这里可选择1/2。

    这里设置core为1,单core线程数为1,那么在Linux系统下能看到CPU为单核单线程,打印如下:

root@ubuntu:~# cat /proc/cpuinfo

processor    : 0

model name    : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz

physical id    : 0

siblings    : 1

core id        : 0

cpu cores    : 1

内存

    表示分配给虚拟机Linux系统内存容量,这里分配1G,那么在Linux系统下可以看到只有1G内存容量可使用:

root@ubuntu:~# cat /proc/meminfo

MemTotal:        1002716 kB

总结

    平时虚拟机系统只是用来查看文件和编译小程序,那么处理器和内存配置可设置默认值。但在需要编译大型软件(如Android/Buildroot)需要计算机最大性能时,可以适当的把处理器配置提高,内存容量改大,这样可提升性能并节约编译时间。修改这些配置时需要shuntdown虚拟机系统之后设置才能生效。

1、先用#ulimit -a可以查看系统core文件的大小限制(第一行),core文件大小设置为0, 即没有打开core dump设置;

[cpp] view plain copy print?

root@XZX:~/cnnic/project/dnsx/dnsX# 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) 46621

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) 46621

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

root@XZX:~/cnnic/project/dnsx/dnsX# 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) 46621

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) 46621

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

2、接下来使用#ulimit -c [kbytes]可以设置系统允许生成的core文件大小;

ulimit -c 0 不产生core文件

ulimit -c 100 设置core文件最大为100k

ulimit -c unlimited 不限制core文件大小

执行#ulimit -c unlimited,然后#ulimit -a查看结果如下(第一行):

[cpp] view plain copy print?

root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a

core file size          (blocks, -c) unlimited

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 46621

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) 46621

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a

core file size          (blocks, -c) unlimited

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 46621

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) 46621

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

此时,core dump设置打开了,再执行程序出现段错误时,在当前工作目录下产生了core文件,然后我们就可以用gdb调试core文件了。

例如:

#gdb ./test core.2065

注:Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。

很多系统默认的core文件大小都是0,我们可以通过在shell的启动脚本/etc/bashrc或者~/.bashrc等地方来加入 ulimit -c 命令来指定core文件大小,从而确保core文件能够生成。

除此之外,还可以在/proc/sys/kernel/core_pattern里设置core文件的文件名模板,详情请看core的官方man手册。

需要说明的是:上述方法只是在当前shell中生效,重启之后,就不再有效了。永久生效的办法是如下:

永久生效办法:

#vi /etc/profile 然后,在profile中添加:

ulimit -c 1073741824

(但是,若将产生的转储文件大小大于该数字时,将不会产生转储文件)

或者

ulimit -c unlimited

这样重启机器后生效了。 或者, 使用source命令使之马上生效。

#source /etc/profile

三、指定内核转储的文件名和目录

修改完内核转储设置后,当程序core dump后发现确实在本地目录产生了core文件,但是如果程序多次core dump时,core文件会被覆盖,原因是每次core dump后生成的文件名默认都叫core,接下来就分享下如果想在每次core dum时产生的core文件都带上进程号怎么 *** 作,或者你想把内核转储文件保存到其他目录怎么办?

1、core dump文件名自动加上进程ID

#echo 1 > /proc/sys/kernel/core_uses_pid

最后生成的core dump文件名会加上进程ID.

2、另外可以通过修改kernel的参数,指定内核转储所生成的core文件的路径和文件名。

可以通过在/etc/sysctl.conf文件中,对sysctl变量kernel.core_pattern的设置。

#vim /etc/sysctl.conf 然后,在sysctl.conf文件中添加下面两句话:

kernel.core_pattern = /var/core/core_%e_%p

kernel.core_uses_pid = 0

保存后退出。

注:如果/proc/sys/kernel/core_uses_pid 这个文件的内容被配置成1,即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。

这里%e, %p分别表示:

%c 转储文件的大小上限

%e 所dump的文件名

%g 所dump的进程的实际组ID

%h 主机名

%p 所dump的进程PID

%s 导致本次coredump的信号

%t 转储时刻(由1970年1月1日起计的秒数)

%u 所dump进程的实际用户ID

可以使用以下命令,使修改结果马上生效。

#sysctl –p /etc/sysctl.conf

请在/var目录下先建立core文件夹,然后执行a.out程序,就会在/var/core/下产生以指定格式命名的内核转储文件。查看转储文件的情况:

#ls /var/core

core_a.out_2456


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7902145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存