本文适合于有一定c++开发经验,但是还不明确如何到linux服务端开发程序的同学。
几年前用的是ssh到云服务上,再用vim在云上开发的形式
- ssh dongbeijing.dbj@11.158.142.176
- vim hello.c
现今,由于vscode比较好用,这几年换了vscode内部配置ssh到云服务上开发,插件名称是Remote SSH。
输入密码,选择目录打开后,确认正常后,可以保存为workspace,方便重复使用 。
云服务:
- ssh-keygen -t rsa
-
- # 文件名 auth
- Enter file in which to save the key: auth
-
- cat ~/.ssh/auth.pub >> ~/.ssh/authorized_keys
- chmod 644 ~/.ssh/authorized_keys
本地开发机器:
scp dongbeijing.dbj@11.158.142.176:~/.ssh/auth ~/.ssh
vscode指定ssh配置路径为~/.ssh/config
config文件为
- Host 11.158.142.176
- HostName 11.158.142.176
- User dongbeijing.dbj
- IdentityFile ~/.ssh/auth
切换root账号
sudo bash -c bash
查看文件大小
du -sh /tmp/test.pcap
scp复制
- # 本地机器执行
- scp dongbeijing.dbj@11.114.12.212:/tmp/test.pcap ./
或者用osscmd上传到云上oss存储。
osscmd put test.pcap oss://myworkspac/network/pcap
或者用sz工具直接复制
sz test.pcap
保存文件,用wireshark看
tcpdump -i eth0 host 111.63.213.231 and port 31586 -w /tmp/test.pcap
用enn和vvv,线上直接看
tcpdump -i bond0.715 udp port 1106 and host 44.123.42.3 -enn -vvv
ip不通
- # 添加
- sudo iptables -A INPUT -s 127.0.0.1 -p udp -d 127.0.0.1 --sport 33698 -j DROP
-
- # 删除
- sudo iptables -D INPUT -s 127.0.0.1 -p udp -d 127.0.0.1 --sport 33698 -j DROP
-
- # 查询
- sudo iptables -L -n -v
丢包延迟
- ## === 添加
- sudo tc qdisc add dev lo root handle 1:prio
-
- # 延迟300ms 丢包15%
- sudo tc qdisc add dev lo parent 1:3 handle 30:netem loss 15% delay 300ms
-
- # 生效
- sudo tc filter add dev lo protocol ip parent 1:0 u32 match ip sport 33698 0xffff flowid 1:3
-
-
- ## === 删除
- sudo tc qdisc del dev lo root
-
- ## === 查看
- sudo tc qdisc show dev lo
- sudo tc fliter show dev lo
curl模拟http请求
curl -v 'http://myhello.com' -o /dev/null -x 127.0.0.1:10080
模拟100次curl的方法
for((i=1; i<=100; i++)); do curl -s "www.helloworld.com"; done
tsar --cpu --percpu -i1 -n1 | less |grep 19:30
- dmesg -T # 启动信息
- cat /var/log/mcelog # 硬件信息
- tsar --cpu -I percpu -i1 -n1 # n1表示只输出1次
- ifconfig
- ip route # 如果显示bond,那么是逻辑网卡
- ping 127.0.0.1
- ethtool -k eth0 # 网卡硬件加速
- ip route | grep lock
我使用的GitLens,方便可视化可blame信息,当然在vs code的扩展商店里,搜Git也有其他工具。
rpm -qa|grep helloworld
插件名称是Remote Development,需要配置launch.json,指定远程启动目录。
云服务端需要配置gdbserver,其中2333是vscode的默认gdb链接端口。
sudo localhost:2333 hello.out -c config.txt
gcore单个进程,产生core dump,用gdb可以看到各个变量的情况。
参考示例
- define print_connections
- set $i=0
- while $i<1000
- set $c=ngx_cycle.connections[$i]
- if $c.fd > 0
- if $c.read.handler==ngx_rtmp_recv
- set $s=(ngx_rtmp_session_t*)$c.data
- p $i
- p $s.params
- end
- end
- set $i=$i+1
- end
- end
-
查看进程的堆栈情况,如何进程一直卡在相同的堆栈里,那么大概率是死循环了。
pstack 1234 #进程号是1234
查看进程的套接字创建是否正常
ss -alp|grep 1234 # 进程号 1234
主要会i、a、GG和ctrl+d/u等,满足看日志需求
动态看日志的方法
tail -f error.log | grep "hello world, times:"