linux kernel 4.8以上内核NR_KERNEL_STACK的改变

1. NR_KERNEL_STACK是干什么用的?

通过下面的命令,我们可以查看内核栈的数量:

这个值在内核中的宏为:NR_KERNEL_STACK,表示当前内核中有多少个内核栈。

我们使用这个数字来监控K8S节点上使用PID的数量,以避免PID被耗尽。

2. 那么PID与内核栈有什么关系呢?

在linux系统中,每个进程、子进程和线程在运行时都会有一个PID。这些进程或线程在运行时,因为CPU需要进行任务切换,在任务切换时就需要上下文交换,在上下文交换时就需要把当前进程的上下文压到内核栈内去,以便下次再运行时取出继续执行。

所以可以确定:每个进程、子进程和线程都会有一个内核栈。内核栈的数量与PID的数量大致相当。

注:基于linux内核的线程,比如java的线程与linux的线程是一一对应的,nodejs只使用了linux的进程,线程模型是其自己实现的,golang最特别,使用了多进程,每个进程上有多线程(基于内核),线程上还是自己实现的协程或者说goroute(可以理解为自己实现的线程)

继续阅读

centos linux 7 更新第三方内核

centos linux 7本身的内核为3.10,比较老,很多新的特性都没有,可以考虑使用第三方的比较新的内核。如ELRepo仓库就提供了kernel 4.4.x的长期支持版本及5.0.x的最新版.

启用 ELRepo 仓库:
导入密钥:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装yum源包:
yum install -y https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

安装内核:
yum --enablerepo=elrepo-kernel install kernel-lt -y

配置启动内核,使用最新的就可以了:
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0

kernel 4.4 对kdump参数有调整,需做如下修改:
vim /etc/default/grub

crashkernel=auto
改成:
crashkernel=128M

可使用以下命令一键修改:
sed -i 's/crashkernel=auto/crashkernel=128M/' /etc/default/grub
否则使用新内核重启后kdump会报错。

生成新的配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

重启机器:
reboot

重启后可以看看kdump服务是否正常:
systemctl status kdump

以下命令可以测试做一次kernel dump:

如果需要更新header包及devel包,操作可参考:

这样当系统出问题时,就能方便调试问题了。

如何获取自己的公网IP

如何获取自己的公网IP呢?

1. dig查google dns

2. curl查IP网站

3. 参考

http://www.chenshake.com/page/2/
https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/

centos linux 7下使用nmcli绑定网卡

 

在 CentOS 7.x 中可以用 nmcli(Network Manager Command Line Interface:网络管理命令行接口)进行网卡绑定。

多网卡的7种bond模式原理请参考:http://support.huawei.com/huaweiconnect/enterprise/thread-282727.html

官方文档:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Network_Bonding_Using_the_NetworkManager_Command_Line_Tool_nmcli.html

继续阅读

LVM物理卷迁移

在生产环境中有时候会经常碰到不能停机维护的情况,或停机窗口时间不够用,比如希望更换存储系统,几十个T或更大的数据,在半天内是迁移不完的,那这个时候就只能在线做了。

下面测试使用LVM的物理卷迁移的方式来在线迁移数据:

1) 物理机已分配2块硬盘sdc,sdd

继续阅读

jks格式的证书转base64的key格式证书

最近发现公司之前申请的SSL证书是tomcat使用的jks格式的私key,但是我现在要放到nginx上使用,所以需要把jks格式的证书转base64的私key格式证书。

网上找了一些资料:

JKS(Java KeyStore)是Java的一个证书仓库,包括授权整数和公钥整数等。JDK提供了一个工具keytool用于管理keystore。转换步骤:

1.使用keytool导出成PKCS12格式:


2. 生成pem证书(包含了key,server证书和ca证书):

继续阅读

使用MySecureShell做sftp服务器安装与配置

有些合作方需要我们提供sftp服务帐号来交换信息,linux自带的sftp开出去不是很安全,网上找了一下,发现了MySecureShell这个东东作sftp服务器非常不错。

1. 安装
下载页:http://mysecureshell.sourceforge.net/en/download.html

2. 配置 继续阅读

利用dnsmasq来修改dns记录

我想做技术的或多或少都会知道dnsmasq,因为基本上所有的家用路由都内置了它,使用他来做域名服务的缓存代理。

仔细研究你会发现,除了缓存代理的基本功能之外,它修改dns记录的功能也很有意思。看看下面:

1. 安装dnsmasq:

在centos linux上的,可以直接yum安装:

yum install -y dnsmasq

2. 配置dnsmasq:
vim /etc/dnsmasq.conf
#监听所有网卡
bind-interfaces
#修改A记录
address=/www.163.com/1.2.3.4
#修改mx记录
mx-host=126.com,m.126.com,10
mx-host=163.com,m.163.com,10

继续阅读

AWS EC2上ftp的配置

AWS EC2上配置ftp服务器有它特殊的地方:

1. 理论上来说,EC2的机器是在内网,机器上只有内网IP.外网IP是映射到内网IP上的。

2. 有安全组,相当于带了一个防火墙。

一般的vsftpd配置文件是下面这样的:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

use_localtime=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_min_port=2000
pasv_max_port=3000
继续阅读