- 开启swap分区
sudo dd if=/dev/zero of=/root/swapfile bs=1M count=4096 #增加 4G 交换空间 8G 8192
sudo mkswap /root/swapfile #建立swap的文件系统
sudo swapon /root/swapfile #启用swap文件
echo "/root/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab #更新 fstab 文件
- 查看进程使用内存
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep dist_game | sort -nrk5
#其中rsz为实际内存,上例实现按内存排序,由大到小
- 性能测试(stress)和性能分析(sysstat)
stress #--cpu cpu压测选项 -i io压测 -c 进程数 --timeout 执行时间
mpstat -P ALL 2 5 #监控所有 2表示2s输出一次 5表示共输出5次
pidstat -u 5 1 #查看进程状态
#平均负载:单位时间内,处于可运行状态和不可中断状态的进程数,包括(正在使用CPU,等待CPU,等待I/O)
# execsnoop 短时进程查看工具
dstat 1 10 #查看cpu和io
- cpu使用率高异常高,查不到是那个进程,怎么办?
#1. 使用top查看运行进程中,R状态的进程
#2. 查看进程pid是否一直变化,是(短时间进程)
#3. 使用pstree查看进程树
-
什么情况下会出现僵尸进程?
- 子进程执行太快,父进程还没来得及回收
- 父进程没有回收子进程的操作,父进程没结束(结束后由init进程回收)
-
优化手段
- 应用程序:编译器优化,算法优化,异步处理,多线程代替多进程,善用缓存
- 系统优化:CPU绑定,CPU独占,优先级调整,进程设置资源限制,中断负载均衡
-
time_wait比较多,怎么处理? 参考文章