前言:此博客内容全部转载他人,无一原创,初衷转播优质内容
1 挂载的作用
扩展存储空间
将额外的存储设备连接到Linux系统中,扩展系统的存储容量。
实现数据共享
不同计算机之间可以共享文件和数据,实现更高效的协作工作。
实现备份和恢复
将备份介质挂载到系统中,通过简单的复制和黏贴操作实现文件的恢复。
管理移动设备
将电子设备挂载到系统上,从设备中进行管理。
实现文件系统的更换
保留现有文件和目录的完整性,更换更合适的文件系统。
2 家目录的作用
2.1存储用户文件
家目录为每个用户提供了一个统一的地方来存储其个人文件和目录,如个人的主页、电子邮件、文档、图像、音乐、视频等。
2.2管理用户权限
家目录保证了数据的安全性,用户只能访问自己的家目录,而无法访问其他用户的家目录。用户还可以在家目录中设置文件和目录的权限。
2.3存储系统备份
家目录可以用来作为系统备份的存储位置,用户可以将自己的文件备份到一个独立的目录中,以免在系统故障或者其他不可预测的情况下导致数据的丢失
2.4 什么样的命令可以补全,那么什么样的又不可以?
①做软连接
②找中间人演练
3 检测并确认新硬盘
fdisk
查看或管理硬盘分区
fdisk -l(小写的L) (硬盘设备) 或 fdisk 硬盘设备
实际操作
fdisk查询结果详解
Device:分区的设备文件名称
Boot:是否是引导分区,是的话则有“ * ”标识
Start:该分区在硬盘中的起始位置(柱面数)
End:该分区在硬盘中的结束位置(柱面数)
Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节
ld:分区对应的系统ID号,83表示Linux中的默认分区(XFS或EXT4),8e标识LVM逻辑卷
System:分区系统
fdisk命令交互模式中指令
lsblk参数
df命令 使用权限是所有用户
fstab添加字段分析
第1字段:设备名或设备卷标明
第2字段:文件系统的挂载点目录的位置
第3字段:文件系统类型,如xfs、swap等
第4字段:挂载参数,即mount命令中“ -o ”选项后可使用的参数。例如,defaults(默认参数)、rw(可读可写)、ro(只读)、noxec(禁用执行程序)
第5字段:表示文件系统是否需要dumo备份(dump是一个备份工具)。一般设置为1时表示,设为0时将被dump忽略
第6字段:该数字决定在系统启动时进行磁盘检查的顺序。0表示不进行检查, 1表示优先检查,2表示其次检查
磁盘配额
1 定义
当一个磁盘空间被多个用户使用时,为了公平,防止某些用户占用过多的空间,我们就需要对磁盘进行配额管理,对可用存储空间进行限制。
2 Linux磁盘配额管理
Linux系统磁盘配额管理只能针对整个文件系统设置,即该磁盘分区的所有目录或者文件受配额限制,不能针对某个目录进行配额限制。同时Linux系统的磁盘配额功能可以针对用户,也可以针对组设置,在Linux系统中root用户不受配额限制,也就是说Linux系统上的磁盘配额管理只针对普通用户和组有效。
3 Linux系统上磁盘配额限制方式
磁盘容量限制:通过限制用户或者组使用的磁盘空间大小
文件数量限制:通过iNode索引节点数限制用户或者组使用空间大小
4 实现磁盘配额的条件
需要Linux内核支持
安装xfsprogs与quota软件包
5 Linux磁盘配额的特点
作用范围:针对指定的文件系统(分区)
限制对象:用户账号、组账号
限制类型:磁盘容量、文件数量
限制方法:软限制、硬限制
linux系统优化、安全加固
1 基础优化
更新yum官方源
关闭不需要的服务
关闭不需要的TTY
对TCP/IP网络参数进行调整。例如:优化Linux下的内核TCP参数以提高系统性能
设置时间同步
优化最大文件数限制
关闭SELINUX
修改SSH登录配置
清理登录时的时候显示的系统及内核版本
删除不必要的系统用户和群组
关闭重启ctl-alt-delete组合键
设置一些全局变量
设置history历史记录
Centos6.4最小化安装后启动网卡
添加普通用户,设置sudo权限
禁止root远程用户登录
sed修改远程端口
防火墙iptables配置
修改默认DNS
安装必要软件,更新yum源(epel源)
更新内核和软件到最新版本
去除上次登录的信息
2.安全加固
初始化环境后需要做的安全工作
添加普通用户登录,禁止root用户登录,更改SSH端口号。(修改SSH端口不一定绝对,当然如果暴露在外网,建议改下)
服务器使用密钥登录,禁止密码登录
开启防火墙,关闭SElinux,根据业务需求设置响应的防火墙规则
安装fail2ban这种防止SSH暴力破解密码的软件
设置只允许公司办公网出口IP能登录服务器(看公司实际需要)也可以安装VPN等软件,只需要连接VPN到服务器上
修改历史命令记录条数为10条
只允许有需要的服务器可以访问外网,其他全部禁止
做好软件层面的防护(设置nginx_waf模块防止SQL注入;把Web服务使用www用户启动,更改网站目录的所有者和所属组为www)
内存分析工具包含的性能指标
如何迅速分析内存的性能瓶颈
通常先运行几个覆盖面比较大的性能工具,如 free,top,vmstat,pidstat 等
先用 free 和 top 查看系统整体内存使用情况
再用 vmstat 和 pidstat,查看一段时间的趋势,从而判断内存问题的类型
最后进行详细分析,比如内存分配分析,缓存/缓冲区分析,具体进程的内存使用分析等
常见的优化思路:
最好禁止 Swap,若必须开启则尽量降低 swappiness 的值
减少内存的动态分配,如可以用内存池,HugePage 等
尽量使用缓存和缓冲区来访问数据。如用堆栈明确声明内存空间来存储需要缓存的数据,或者用 Redis 外部缓存组件来优化数据的访问
cgroups 等方式来限制进程的内存使用情况,确保系统内存不被异常进程耗尽
/proc/pid/oom_adj 调整核心应用的 oom_score,保证即使内存紧张核心应用也不会被OOM杀死
内存性能工具
根据不同的性能指标来找合适的工具:
CPU优化
应用程序优化
编译器优化:编译阶段开启优化选项,如gcc -O2
算法优化
异步处理:避免程序因为等待某个资源而一直阻塞,提升程序的并发处理能力。(将轮询替换为事件通知)
多线程代替多进程:减少上下文切换成本
善用缓存:加快程序处理速度
系统优化
CPU绑定:将进程绑定要1个/多个CPU上,提高CPU缓存命中率,减少CPU调度带来的上下文切换
CPU独占:CPU亲和性机制来分配进程
优先级调整:使用nice适当降低非核心应用的优先级
为进程设置资源显示: cgroups设置使用上限,防止由某个应用自身问题耗尽系统资源
NUMA优化: CPU尽可能访问本地内存
中断负载均衡: irpbalance,将中断处理过程自动负载均衡到各个CPU上
TPS、QPS、系统吞吐量的区别和理解
QPS(TPS)
并发数
响应时间
QPS(TPS)=并发数/平均相应时间
用户请求服务器
服务器内部处理
服务器返回给客户
QPS 类似 TPS,但是对于一个页面的访问形成一个 TPS,但是一次页面请求可能包含多次对服务器的请求,可能计入多次 QPS
QPS(Queries Per Second)每秒查询率,一台服务器每秒能够响应的查询次数.
TPS(Transactions Per Second)每秒事务数,软件测试的结果.
如何查看内存使用情况
free来查看整个系统的内存使用情况
top/ps来查看某个进程的内存使用情况
VIRT 进程的虚拟内存大小
RES 常驻内存的大小,即进程实际使用的物理内存大小,不包括swap和共享内存
SHR 共享内存大小,与其他进程共享的内存,加载的动态链接库以及程序代码段
%MEM 进程使用物理内存占系统总内存的百分比
怎样理解内存中的Buffer和Cache?
buffer是对磁盘数据的缓存,cache是对文件数据的缓存,它们既会用在读请求也会用在写请求中
根据不同的性能指标来找合适的工具:
cpu
针对应用程序,我们通常关注的是内核CPU调度器功能和性能。
线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:
① on-CPU:执行中,执行中的时间通常又分为用户态时间 user 和系统态时间 sys
② off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。
如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于 off-cpu 状态,定位问题就会费时很多。但是仍然需要清楚一些概念:
处理器
核
硬件线程
CPU内存缓存
时钟频率
每指令周期数CPI和每周期指令数IPC
CPU指令
使用率
用户时间/内核时间
调度器
运行队列
抢占
多进程
多线程
字长
分析工具:
注意:
-
uptime,vmstat,mpstat,top,pidstat 只能查询到 cpu 及负载的的使用情况。
-
perf 可以跟着到进程内部具体函数耗时情况,并且可以指定内核函数进行统计
#查看系统cpu使用情况
top#查看所有cpu核信息
mpstat -P ALL 1#查看cpu使用情况以及平均负载
vmstat 1#进程cpu的统计信息
pidstat -u 1 -p pid#跟踪进程内部函数级cpu使用情况
perf top -p pid -e cpu-clock
内存
内存是为提高效率而生,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题。同样对于内存有些概念需要清楚:
主存
虚拟内存
常驻内存
地址空间
OOM
页缓存
缺页
换页
交换空间
交换
用户分配器libc、glibc、libmalloc和mtmalloc
LINUX内核级SLUB分配器
分析工具:
说明:
-
free,vmstat,top,pidstat,pmap 只能统计内存信息以及进程的内存使用情况。
-
valgrind 可以分析内存泄漏问题。
-
dtrace 动态跟踪,需要对内核函数有很深入的了解,通过D语言编写脚本完成跟踪。
#查看系统内存使用情况
free -m#虚拟内存统计信息
vmstat 1#查看系统内存情况
top# 1s采集周期,获取内存的统计信息
pidstat -p pid -r 1#查看进程的内存映像信息
pmap -d pid#检测程序内存问题
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名
磁盘IO
磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样。要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。
在理解磁盘IO之前,同样我们需要理解一些概念,例如:
文件系统
VFS
文件系统缓存
页缓存page cache
缓冲区高速缓存buffer cache
目录缓存
inode
inode缓存
noop调用策略
分析工具:
#查看系统io信息
iotop#统计io详细信息
iostat -d -x -k 1 10#查看进程级io的信息
pidstat -d 1 -p pid#查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常
perf record -e block:block_rq_issue -agperf report
#显示网络统计信息
netstat -s#显示当前UDP连接状况
netstat -nu#显示UDP端口号的使用情况
netstat -apu#统计机器中网络连接各个状态个数
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'#显示TCP连接
ss -t -a#显示sockets摘要信息
ss -s#显示所有udp sockets
ss -u -a#tcp,etcp状态
sar -n TCP,ETCP 1#查看网络IO
sar -n DEV 1#抓包以包为单位进行输出
tcpdump -i eth1 host 192.168.1.1 and port 80 #抓包以流为单位显示数据内容
tcpflow -cp host 192.168.1.1
系统负载
Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)简单的说是进程队列的长度。Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load。
#查看负载情况
uptimetopvmstat#统计系统调用耗时情况
strace -c -p pid#跟踪指定的系统操作例如epoll_wait
strace -T -e epoll_wait -p pid#查看内核日志信息
dmesg
偷鸡必成,不掉米