Linux是一种基于UNIX操作系统的开源操作系统内核。
由于其开源性,它可以在各种硬件平台上运行,并且具有良好的可定制性和扩展性。
Linux内核由Linus Torvalds于1991年首次发布,并随后得到全球开发者社区的广泛参与和贡献。
公司要求java工程师要会Linux
为什么公司要求java工程师会Linux操作系统的相关知识呢?
- 部署和运行环境
- 服务端开发和调试
- 自动化部署与持续集成
- 性能优化和故障排除
- 与其他服务的集成
总结来说,企业要求JavaEE开发工程师具备Linux知识是为了能够更好地处理服务器环境、提高开发效率、保证应用程序的性能和稳定性,并与其他服务进行集成。
掌握Linux操作系统的技能可以使JavaEE开发工程师更具竞争力,并在现实工作中更加得心应手。
Linux服务器说白了也已一台机器,那么检查机器总内存大小或在shell脚本中使用内存统计是常见的任务。
本文将通过使用多个有用的命令和工具,采用不同的方法来达到这一目的。
1. free命令
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。
在Linux系统监控的工具中,free命令是最经常使用的命令之一。
命令格式:
free [参数]
常用参数
- -h: 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有
B = bytes
K = kilos
M = megas
G = gigas
T = teras
演示
free -h
结果
- -s<间隔秒数> 持续观察内存使用状况演示:每个五秒显示一次
free -h -s 5
结果
可以使用 Ctrl + C 键盘快捷键轻松终止该过程
2. vmstat 命令
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写类似于free命令,vmstat可对操作系统的虚拟内存、进程、CPU活动进行监控。
它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析
vmstat -w
结果
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 3509592 2108 200668 0 0 14 2 116 93 0 2 98 0 0
-w,–wide output参数用于调整命令输出结果的显示方式。
输出的结果和单独执行vmstat命令得到的结果完全一样,只是在输出时,会以更宽的宽度来展示数据命令显示字段含义(vmstat不加-参数)
vmstat -s
结果
3865308 K total memory
152744 K used memory
121800 K active memory
84996 K inactive memory
3509652 K free memory
2108 K buffer memory
200804 K swap cache
4063228 K total swap
0 K used swap
4063228 K free swap
3681 non-nice user cpu ticks
0 nice user cpu ticks
16512 system cpu ticks
1046086 idle cpu ticks
96 IO-wait cpu ticks
0 IRQ cpu ticks
634 softirq cpu ticks
0 stolen cpu ticks
141780 pages paged in
25244 pages paged out
0 pages swapped in
0 pages swapped out
1230293 interrupts
983789 CPU context switches
1705671832 boot time
51599 forks
输出中的第一个条目是总物理内存。有时,我们不需要所有信息,因此我们可以使用 grep 仅提取所需的条目
vmstat -s | grep -i 'total memory' | sed 's/ *//'
结果
3865308 K total memory
3. top命令
Top命令是 Linux 系统中一个常用的性能分析和监控工具,它可以实时展示系统中各个进程的资源占用状况。
它的作用与 Windows 系统中的任务管理器相似。
top
我们可以看到 Mem 字段旁边的内存信息,并观察到我们总共有 3865308kb 的总内存
4. dmidecode实用工具
dmidecode
是一个用于获取计算机系统中各种硬件信息的实用程序
4.1. 安装 dmidecode
对于基于 Ubuntu 的发行版,我们可以通过 apt 安装软件包:
apt install dmidecode
对于 RHEL、Fedora 和 CentOS,我们可以使用 yum
yum install dmidecode -y
命令
dmidecode
运行dmidecode命令之后,屏幕会输出大量记录,可以使用less分页查看,每个记录有4个不同的值:
dmidecode less
SMBIOS规范定义了以下DMI类型:
Type Information
────────────────────────────────────────────
0 BIOS
1 System
2 Baseboard
3 Chassis
4 Processor
5 Memory Controller
6 Memory Module
7 Cache
8 Port Connector
9 System Slots
10 On Board Devices
11 OEM Strings
12 System Configuration Options
13 BIOS Language
14 Group Associations
15 System Event Log
16 Physical Memory Array
17 Memory Device
18 32-bit Memory Error
19 Memory Array Mapped Address
20 Memory Device Mapped Address
21 Built-in Pointing Device
22 Portable Battery
23 System Reset
24 Hardware Security
25 System Power Controls
26 Voltage Probe
27 Cooling Device
28 Temperature Probe
29 Electrical Current Probe
30 Out-of-band Remote Access
31 Boot Integrity Services
32 System Boot
33 64-bit Memory Error
34 Management Device
35 Management Device Component
36 Management Device Threshold Data
37 Memory Channel
38 IPMI Device
39 Power Supply
40 Additional Information
41 Onboard Devices Extended Information
42 Management Controller Host Interface
假如我们想看看内存 DMI 类型,可以使用分配的数字 5、6、16、17、18、19、20、21 和 22 访问。
dmidecode --type 19
看到内存总大小为8 GB
以下是dmidecode
的一些常用选项和功能:
- 查看产品名称:可以通过
dmidecode | grep "Product Name"
来获取当前连接的主板的“产品名称”。 - 查看系统序列号:可以使用
dmidecode -s system-serial-number
来获得服务器的系统序列号。 - 查看内存信息:通过
dmidecode -t memory
可以获得电脑中各个内存插槽的信息。 - 查看OEM信息:如果需要了解制造商信息,可以使用
dmidecode -t OEM
,但这个选项可能不再常见。 - 查看处理器信息:如果想要获取处理器的详细信息,可以使用
dmidecode -t processor
。
5. /proc/meminfo虚拟文件
proc文件系统中的 meminfo文件包含关于系统对内存使用情况的信息。
free命令就是读取这个文件来呈现当前系统包含物理内存和SWAP内存在内的空闲内存和已使用内存
使用cat命令读取/proc/meminfo文件,我们可以获取内存信息
cat /proc/meminfo
假如要读取文件前三行?
cat /proc/meminfo | head -n 3
MemTotal: 3865308 kB 总内存
MemFree: 3474652 kB 空闲内存
MemAvailable: 3435164 kB
思考:假设我们正在编写一个 Bash 脚本,我们需要在其中处理物理内存大小,需要怎么做?
#!/bin/bash
total_ram () {
local totalram=$(cat /proc/meminfo | grep -i 'memtotal' | grep -o '[[:digit:]]*')
echo $totalram
}
ram_size=$(total_ram)
echo "Total RAM: $ram_size kB"
现在,让我们保存脚本并使其可执行:
chmod +755 totalram.sh
./totalram.sh
结果
在Linux中,通过free、vmstat、top、dmidecode和/proc/meminfo等工具和文件,使我们可以全面了解服务器的总内存大小。