无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优:
1.linux文件句柄
linux在整个系统层面和单个进程两个层面对打开的文件句柄进行限制。
配置文件/proc/sys/fs/file-max是对整个系统层面对打开的文件句柄最大数进行控制,单个用户或进程能够打开的文件句柄数受此限制。
通过ulimit -a查看当前用户或进程能够打开的最大文件数:
上述只是默认值,在实际生产环境肯定是不够用的,如果配置过小,有时会报类似can't open so many files的错误。通过ulimit -n可以对该值进行临时修改。
如果想永久生效,需要修改配置文件/etc/security/limits.conf,如soft nofile 10000、hard nofile 10000追加到配置文件中。
2.单个用户最大进程数
上图中max user processes就是单个用户最大进程数的限制,通过ulimit -u可以临时修改。永久修改需要追加,如soft nproc 10000、hard nproc 10000到/etc/security/limits.conf文件中
3.swap分区
又被称为交换分区,占用的是磁盘空间。操作系统可以将一部分数据存于swap分区中,从而为当前运行的程序腾出足够的内存空间。但因为数据存于磁盘,性能会相对内存低,尤其是读写频繁的情绪,IO消耗会更大。
合理设置swap分区大小,比如设置为0,优先使用物理内存。设置方式echo vm.swappiness=0 >> /etc/sysctl.conf。
针对不同系统、用户需要修改的文件可能有所不同,比如对于普通用户最大打开进程限制配置文件/etc/security/limits.d/20-nproc.conf。
除了上述常见的3种调优,还有控制每个端口监听队列的最大长度等调优方式,这里不再赘述。
关于软限制和硬限制的补充:
上文中,soft是软限制,hard是硬限制。
软限制(soft limit):内核实际执行的限制,任何进程都可以将软限制设置为小于或等于对进程限制的硬限制的值、最大线程数和文件数。
硬限制(hard limit):可以在任何时候任何进程中设置,但硬限制需要由超级用户修改。
linux常见面试题
1.linux系统中获取pid为100的进程所监听的tcp端口号
netstat -npta | grep 100
2.查找/home目录下大小为10k的文件
find /home -size 10K
3.在当前目录中的Main.java中关键字keywords出现位置,并将结果追加到main.txt中
find . -name Main.java | xargs grep -n "keywords" >> main.txt
【xargs将前一个命令的输出作为后一个命令的参数】
4.压缩文件夹testDir为testDir.tar.gz
tar -zcvf testDir.tar.gz testDir/
5.解压缩文件testDir.tar.gz到路径/home/user中
tar -zxvf testDir.tar.gz -C /home/user
6.查看磁盘使用情况
df -h
7.查看内存使用情况
free -mt
8.改变当前路径下testDir及其下面所有文件和目录的所有者为tom,组为group-t
chown -R tom:group-t ./testDir
9.赋予testDir权限为rwxr-xr-x
chmod 755 testDir
10.查看文件app.log,从第3000行开始,显示1000行,即显示3000-3999行
cat app.log | tail -n +3000 | head -n 1000
11.查看文件app.log,显示1000行到3000行
cat app.log | head -n 3000 | tail -n +1000
12.统计当前文件夹下的app目录下,js文件数量
ll ./app | grep "^-" | grep js | wc -l
^-:正则表达式,匹配文件