C++项目有几种问题不好排查
多线程问题
内存泄漏
内存越界
野指针(悬空指针)
要学会调试release版本的程序(经过优化的程序)
2020-08-18
template<T>
class Test
{
T& RangeLeft(const T& idx)
{
return idx>0?m_vector[idx]+1:0;
}
};
此模板虽然传递的参数只有uint16_t和uint32_t,但是实际上错误百出。
SIG_PIPE:对端套接字已关闭,但是依旧往套接字中写入数据,会触发此信号
handle SIGPIPE nostop noprint
SIG_TERM:进程结束的信号
排查内存泄漏的过程中,虽然有很多内存泄漏检测工具可以使用,但是可以先gdb thread info命令或break malloc,查看到底谁在高频次的申请内存,从而能初步定位问题。
这个问题现在已经定位到了,虽然还不知道到底是什么原因,但是起码知道是什么原因。
华为鲲鹏平台修改大页内存(已经找到正确的修复方式)
第一步:
vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap default_hugepagesz=2M"
第二步:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinux-4.19.115unixbench_1-rhel8.1-sas-5.1-update-2020-06-16.bz2
Found linux image: /boot/vmlinuz-4.19.115unixbench_1-rhel8.1-sas-5.1-update-2020-06-16
Found initrd image: /boot/initramfs-4.19.115unixbench_1-rhel8.1-sas-5.1-update-2020-06-16.img
Found linux image: /boot/vmlinux-4.19.115-rhel8.1-sas-5.1-update-2020-06-16.bz2
Found linux image: /boot/vmlinuz-4.19.115-rhel8.1-sas-5.1-update-2020-06-16
Found initrd image: /boot/initramfs-4.19.115-rhel8.1-sas-5.1-update-2020-06-16.img
Found linux image: /boot/vmlinuz-4.14.115ub
Found initrd image: /boot/initramfs-4.14.115ub.img
Found linux image: /boot/vmlinuz-4.14.0-115.el7a.0.1.aarch64
Found initrd image: /boot/initramfs-4.14.0-115.el7a.0.1.aarch64.img
Found linux image: /boot/vmlinuz-0-rescue-5d7e62c3d0f541a19114be7a8cff5c5e
Found initrd image: /boot/initramfs-0-rescue-5d7e62c3d0f541a19114be7a8cff5c5e.img
done
配置成功后,重启机器即可生效。
使用rename,不同文件系统在调用rename来拷贝或移动文件时,会失败,因为rename实际上是修改inode的指向,文件系统不同,inode怎么指呢?
为啥rename在不同文件系统使用不好使呢?秉着知其然知其所以然的性格,有空时,一定把这看明白
问题排查
问题描述
同样是华为的机器,同样的处理器型号(cpu 96核心),开启了numa,关闭了超线程
大页内存配置:30G,都在node0节点上
抓包cpu:node0上的所有cpu都隔离出来用于抓包(0~23),实际只用了8个
抓包程序运行参数相同
结果差异:其中一台机器抓包能达到8G多,但是出问题的机器上只能抓包到500M左右。
查看了半天,发现是bios版本不一致,抓包丢包的那个bios版本明显过低。