简介 记录一下Linux运维相关的学习资料;
Centos 安装完,可以直接将/etc/sysconfig/network-scripts/ifcfg-xxx此选项打开ONBOOT=yes。这样一般都能上网了。
Powerlevel10k
https://github.com/romkatv/powerlevel10k
安装字体
1 2 3 4 5 6 7 8 9 10 11 12 git clone https://github.com/ryanoasis/nerd-fonts.git --depth 1 cd nerd-fontschmod +x install.sh./install.sh git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM /themes/powerlevel10k vim ~/.zshrc ZSH_THEME="powerlevel10k/powerlevel10k" POWERLEVEL9K_MODE="awesome-patched" git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM /plugins/zsh-autosuggestions plugins=(git zsh-autosuggestions )
使用这个主题,速度会非常快;
EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.如果不安装这个库,将会少了很多的软件包。yum -y install epel-release
可以安装一下zsh,autojump,autojump-zsh,oh-my-zsh。自从2019年之后,mac就默认使用zsh代替了bash。
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装zshyum install -y zsh;查看shell类型echo $SHELL;切换默认的shell类型chsh -s /bin/zsh;
安装了zsh之后,可以通过执行chsh来设置成默认的shell。安装完成之后xshell工具的home键无法使用。可以通过在zshrc文件里面添加这些内容。
zsh插件
1 2 3 4 5 6 cd ./.oh-my-zsh/custom/pluginsgit clone git://github.com/wting/autojump.git cd autojump./install.py or ./uninstall.py
参考文档home-end-keys-in-zsh-dont-work-with-putty
有时候会升级失败,这个还是由于git访问不流畅造成。
先将本地的oh my zsh目录找到,通过git pull直接拉取最新的版本;
执行这个指令 upgrade_oh_my_zsh 就能将版本升级好了。
常用的软件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 yum install -y wget git screen libtool automake yum install zlib-devel -y yum install centos-release-scl -y yum makecache yum install devtoolset-7-gcc-c++ -y yum install llvm-toolset-7.0-y yum install cmake -y yum install python3-devel yum install curl-devel mariadb-devel.i686 yum install man-pages man-db man yum install man-pages libstdc++-docs yum install tcpdump debuginfo-install gcc scl enable llvm-toolset-7 devtoolset-7 bash curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py pip install shadowsocks yum install mariadb-libs yum install mariadb-devel yum install mariadb-server systemctl start mariadb systemctl enable mariadb yum info cmake /etc/bashrc/profile source /opt/rh/llvm-toolset-7/enablesource /opt/rh/devtoolset-7/enable查看机器版本信息 LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.8.2003 (Core) Release: 7.8.2003 Codename: Core cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 10 Intel(R) Xeon(R) CPU E5-2430 v4 @ 2.10GHz 1. 命令行方式登陆 systemctl set-default multi-user.target 2. 图形化界面登陆 systemctl set-default graphical.target
man帮助文件的章节意义
1 2 3 4 5 6 7 8 9 10 11 The section numbers of the manual pages are as follows: 1 – Executable programs or shell commands 2 – System calls (functions provided by the kernel) 3 – Library calls (functions within program libraries) 4 – Special files (usually found in /dev) 5 – File formats and conventions eg /etc/passwd 6 – Games 7 – Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) 8 – System administration commands (usually only for root) 9 – Kernel routines [Non standard]
centos 7防火墙 检查防火墙状态 1 2 firewall-cmd --list-all firewall-cmd --state
禁用随系统启动防火墙
1 systemctl disable firewalld
启用随系统启动防火墙
1 systemctl enable firewalld
关闭防火墙
1 systemctl stop firewalld
当前防火墙服务状态
1 systemctl status firewalld
永久开放防火墙端口
1 2 firewall-cmd --permanent --zone=public --add-port=52310-52320/tcp sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent
重新加载防火墙规则
1 sudo firewall-cmd --reload
netcat 尝试端口连接
使用tcp4方式连接一个ip地址的端口
1 2 3 4 5 6 7 8 9 10 11 12 nc -4 ip_address port [root@test-01 ~] Connection to 127.0.0.1 22 port [tcp/ssh] succeeded! SSH-2.0-OpenSSH_7.4 nc --help See the ncat(1) manpage for full options, descriptions and usage examples man ncat Ncat 7.50 ( https://nmap.org/ncat ) nc -zv 127.0.0.1 9100 Connection to 127.0.0.1 9100 port [tcp/jetdirect] succeeded!
在帮助文件里面可以获取更多的信息。
1 2 3 4 5 6 7 8 9 10 Connect to example.org on TCP port 8080. ncat example.org 8080 Listen for connections on TCP port 8080. ncat -l 8080 nc -l 10010 nc: connect to xxx.xxx.xxx.xxx port 10010 (tcp) failed: Connection timed out Connection to xxx.xxx.xxx.xxx 10011 port [tcp/*] succeeded!
检查端口情况
检查当前
LNMP 在centos中一般直接使用套件来安装。
LNMP
LNMP-Home
Linux系统设置 批量设置环境变量 https://stackoverflow.com/questions/19331497/set-environment-variables-from-file-of-key-value-pairs
.env
env $(cat .env | xargs) rails
修改时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
locale设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@vm10-0-2-2 raw_database] LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
如果发现有问题,可以通过在/etc/profile文件中添加
1 2 export LANG="en_US.UTF-8" export LC_ALL="en_US.UTF-8"
检查coredump的配置 1 2 cat /proc/sys/kernel/core_pattern
一般我们将coredump文件生成目录重定向到一个固定的地方:
1 2 3 mkdir -p /data/cores/chmod a+w /data/cores/ -Recho "/home/cores/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
设置ulimit
1 2 3 4 5 6 7 8 9 10 ulimit -n 65535ulimit -c unlimitedvi /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 * soft core unlimited
centos yum proxy
1 2 3 4 5 /etc/yum.conf proxy=http://代理服务器IP地址:端口号 proxy=http://代理服务器IP地址:端口号 proxy_username=代理服务器用户名 proxy_password=代理服务器密码
centos安装python3.6
softwarecollections-下载网站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ sudo yum install centos-release-scl $ sudo yum-config-manager --enable centos-sclo-rh-testing $ sudo yum-config-manager --enable rhel-server-rhscl-7-rpms $ sudo yum-config-manager --enable rhel-server-rhscl-beta-7-rpms $ sudo yum install rh-python36 $ scl enable rh-python36 bash
遇到过的报错 1 Error: ENOSPC:System limit for number of file watchers reached
这个错误的意思时系统对文件监控的数量已经到达限制数量了!!
造成的结果: 执行的命令失败!或抛出警告(比如执行 react-native start 或者打开 vsocde)
解决方法:
修改系统监控文件数量
Ubuntu
1 2 3 4 5 sudo vim /etc/sysctl.conf 最后加入 fs.inotify.max_user_watches=524288 搞定 sudo sysctl -p
ubuntu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 sudo apt-get update && apt-get upgrade sudo apt-get install mariadb-server -y sudo apt-get install unzip -y sudo apt-get install zlib1g-dev -y sudo apt-get install libmariadbclient-dev -y sudo apt install p7zip-full -y sudo apt install -y "screen" sudo apt install clang-format -y sudo apt-get install gcc-7 g++-7 -y sudo apt-get install clang cmake unzip screen clang-format mariadb-server unzip golang python3-pip automake -y sudo apt-get install git libmariadbclient-dev p7zip-full openssl -y sudo apt-get install nodejs -y sudo apt-get install gdb -y apt update sudo apt update sudo apt upgrade sudo apt install build-essential ccache dos2unix autoconf manpages-dev glibc-doc libstdc++-10-doc \ unzip clangd -y apt -y install mariadb-server mariadb-client libmysqlclient-dev apt install libmysqlclient-dev Cannot make directory '/run/screen' : Permission denied export SCREENDIR=$HOME /.screenabel@xiaozanbiao:~/learn/c++/octopus_svr/octopus_svr/build$ screen -S abel Directory /home/abel/.screen must have mode 700. abel@xiaozanbiao:~/learn/c++/octopus_svr/octopus_svr/build$ chmod 700 ~/.screen/ abel@xiaozanbiao:~/learn/c++/octopus_svr/octopus_svr/build$ screen -S abel 在使用 screen 命令创建了一个窗口后,你可以使用 Ctrl+a 和 Esc 进入「复制模式」,此时可以使用方向键或 PageUp/PageDown 键来滚动屏幕内容,也可以使用鼠标进行滚动。在复制模式下,你可以查看已经滚动到屏幕外的内容。 如果你想直接查看已经滚动到屏幕外的内容而不进入复制模式,可以使用 Ctrl+a 和 ] 进入「回滚模式」。在回滚模式下,你可以使用方向键或 PageUp/PageDown 键来滚动屏幕内容,而当前窗口中的内容不会被清除。如果你想回到正常模式,可以使用 Ctrl+a 和 Ctrl+l 或输入 clear 命令清空屏幕。 使用 GNU Screen 工具可以在终端中进行多窗口分屏。以下是一些基本的 GNU Screen 使用方法: 安装 GNU Screen: 如果你的系统中尚未安装 GNU Screen,你可以使用系统包管理器进行安装。例如,在 Ubuntu 上,可以使用以下命令安装: sudo apt-get install screen 启动 GNU Screen: 在终端中输入 screen 命令启动 GNU Screen 会话: 分屏: 按下 Ctrl + A 然后按下 |(竖线符号)来进行垂直分屏,按下 Ctrl + A 然后按下 S 来进行水平分屏。 切换窗口: 按下 Ctrl + A 然后按下 Tab 或者按下 Ctrl + A 然后按下方向键来切换窗口。 关闭窗口: 在要关闭的窗口中按下 Ctrl + D。 退出 GNU Screen: 在所有窗口都关闭后,可以按下 Ctrl + A 然后按下 K 或者直接关闭终端来退出 GNU Screen。 这些是 GNU Screen 的一些基本用法。你可以根据需要在屏幕上创建多个窗口,方便在同一终端中进行多个任务。 方法 2: 修改已运行的 screen 会话的名称 如果你已经在 screen 会话中,并且想修改当前会话的名称,可以按以下步骤操作: 1. 进入 screen 会话。 2. 按 Ctrl + a,然后按 A(注意大小写),屏幕底部会提示你输入新的会话名称。 3. 输入新的名称并按回车。 方法 3: 使用命令修改名称 你还可以通过命令直接在 screen 会话中修改名称: 1. 在 screen 会话中按 Ctrl + a。 2. 然后输入以下命令(不用按回车): sudo apt install sysstat prog_name="your_programe_name" prog_mem=$(pidstat -r -u -h -C $prog_name |awk 'NR==4{print $12}' ) time=$(date "+%Y-%m-%d %H:%M:%S" ) echo $time "\tmemory(Byte)\t" $prog_mem >>~/record/prog_mem.log$ pidstat -r -u -h -C Level 2 5 vim /etc/yum.repos.d/wandisco-git.repo [wandisco-git] name=Wandisco GIT Repository baseurl=http://opensource.wandisco.com/centos/7/git/$basearch / enabled=1 gpgcheck=1 gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco sudo apt install curl curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash curl -o- https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh | bash chmod +x ~/.nvm/nvm.shsource ~/.bashrcyum install git sudo apt install graphviz
apt 相关知识 使用apt-get查询安装指定版本的软件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 apt-cache show libjemalloc-dev Package: libjemalloc-dev Architecture: amd64 Version: 5.2.1-1ubuntu1 Priority: extra Section: universe/libdevel Source: jemalloc Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Faidon Liambotis <paravoid@debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 2748 Depends: libjemalloc2 (= 5.2.1-1ubuntu1) Suggests: binutils Filename: pool/universe/j/jemalloc/libjemalloc-dev_5.2.1-1ubuntu1_amd64.deb Size: 424588 MD5sum: f519936da1e4557812ebad9cbf9e1029 SHA1: 2e5e464c4c2f051b7f32ed44a805bd7f08ec3738 SHA256: c5d64ba693ad45dd7c41f1d103a74816482601f7d0272ed49fc5441e9e1deb91 Homepage: http://jemalloc.net/ Description-en: development files and documentation for jemalloc Files used for development with jemalloc. This package contains headers and documentation. . jemalloc is a library providing a malloc(3) implementation for multi-threaded processes on multi-processor systems. Description-md5: f91b42ea17991369b6b9cd46f2828e3f
man 帮助文件安装
Linux下完整安装 manpages
1 2 3 4 5 sudo apt-get install linux-doc sudo apt-get install libcorelinux-dev sudo apt-get install libstdc++-7-dev sudo apt-get install libstdc++-7-doc sudo apt-get install manpages*
安装g++-11 ubuntu-g++-11
1 2 3 4 5 6 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt install -y g++-11 sudo apt purge --autoremove -y g++-11 sudo rm -rf /etc/apt/trusted.gpg.d/ubuntu-toolchain-r_ubuntu_test.gpg sudo rm -rf /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-focal.list
mysql 权限相关 安装完成之后,需要做一些简单的处理,防止安全问题。mysql最后限制访问的ip地址,给指定的ip地址开放访问的独立的密码。
1 2 3 GRANT ALL PRIVILEGES ON * .* TO 'root' @'ip_address' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;FLUSH PRIVILEGES; CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
使用这个命令将处理掉mysql的一些安全问题。
1 mysql_secure_installation
mysql 8.0 版本 root 密码修改
需要执行
然后再执行
1 2 3 ALTER user 'root' @'localhost' IDENTIFIED BY 'root' ;--修改密码为root create user if not exists 'root' @'%' identified by '123456' ; GRANT ALL ON gamedata005.* TO 'root' @'%' ;
MySQL8.0手册
备份数据库 将某个数据库导出,不需要导出数据
1 mysqldump --no-create-db=TRUE --no-data=TRUE -h"ip_address" -uroot -pyourpassword gamedb_10001 > gamedb_10001.sql
具体参数可以通过mysqldump —help中看到。
直接创建数据库
1 mysql -h"ip_address" -uroot -pyourpassword -e "create database gamedb_30001"
将数据表创建到新库中
1 mysql -h"ip_address" -uroot -pyourpassword gamedb_30001 < gamedb_10001.sql
cygwin多次grep没有输出 在.bashrc文件里面增加这一句:
1 alias grep='grep --color --line-buffer'
发现grep失效,无法做正确输出。google研究了一下,原因如下:
管道 | 是全缓冲的,一般来说buffer_size为4096,有些是8192。不管具体值多少,只有buffer_size满了,才会看到输出。
在操作里 >>file 这个操作也是全缓冲的。调整如下
tail -f log | grep —line-buffer xxx | grep —line-buffer yyy
结果输出正常。
grep当带上了 —line-buffer 的时候,每输出一行,就刷新一次。
在unix里,块设备和普通文件,以及管道都是全缓冲的。
ubuntu无法更新 1 The following packages have unmet dependencies
后来我把阿里源换回Ubuntu原生的源就可以安装了,因为阿里源的包太新。转载原文
WSL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 >net stop LxssManager //停止 >net start LxssManager //启动 > wsl -l --all -v > wsl --export Ubuntu-20 .04 d:\ubuntu20.04 .tar > wsl --unregister Ubuntu-20 .04 wsl --import Ubuntu-20 .04 d:\ubuntu d:\ubuntu20.04 .tar --version 2 ubuntu2004 config --default-user Username del d:\ubuntu20.04 .tarecho -e "[user]\ndefault=oduser" >> /etc/wsl.confnetsh winsock reset
1 2 3 4 Linux找出全部可执行文件,并且删除掉。 ls -F|grep '*' | sed 's#*##g' | xargs rm 参考网站: https://www.cnblogs.com/binyue/p/4707948.html
GPG生成
1 2 3 We need to generate a lot of random bytes
查看进程启动时间运行时间
lstart STARTED time the command started. See also bsdstart, start, start_time, and stime. etime ELAPSED elapsed time since the process was started, in the form [[DD-]hh:]mm:ss.
1 2 ps -eo pid,lstart,etime,cmd | grep java 14728 Tue Sep 28 18:01:10 2021 14-16:23:46 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dzookeeper.log.dir
手动清理内存 1 2 3 */5 * * * * echo 3 > /proc/sys/vm/drop_caches
htop减少重复的进程 1 2 3 按F2 选择 Display options 选择 Hide userland threads
文件监视限制上限 1 2 3 4 5 6 7 8 9 cat /proc/sys/fs/inotify/max_user_watchsudo sysctl fs.inotify.max_user_watches=524288 sudo sysctl -p echo fs.inotify.max_user_watches = 524288 | sudo tee -a /etc/sysctl.confsudo sysctl -p
wsl 导入之后默认账号需要切换成自己想要的:
superuser-提供的方案
1 2 3 4 5 6 7 8 9 10 Method 1 - /etc/wsl.conf The current Microsoft recommended way of setting the username in an instance is to create a /etc/wsl.conf in the instance with the following setting: [user] default=username Changing, of course, username to be your default username. Exit your distro/instance, then issue a wsl --terminate <distroname> from PowerShell or CMD. When you restart, the default user should be set . This is safer and less error-prone than the registry-based methods.
记录两款远程桌面工具 rustdesk todesk
1 2 3 4 5 6 7 8 9 sudo apt-get purge openssh-server sudo apt-get install openssh-server sudo vi /etc/ssh/sshd_config 把你的 sshd_config PasswordAuthentication 参数改为和下图一致 PasswordAuthentication no sudo service ssh restart service docker start sleep 2sudo chmod 666 /var/run/docker.sock
frp 推荐使用这个透传;
将本地服务器gogs的3000转发出去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 frps error: type [http] not support when vhost_http_port is not set [common] bind_port=3007 dashboard_port=3009 dashboard_user = admin dashboard_pwd = 你自己的密码 log_file = ./frps.log log_level = info log_max_days = 3 authentication_timeout = 0 max_pool_count = 50 [common] server_addr = 你的服务器ip地址 server_port = 3007 [ssh] type = tcplocal_ip=127.0.0.1 local_port = 3008 remote_port=3008
zeronet n2n 去中心化通讯。
neovim Neovim
ubuntu安装 g++ 11 1 2 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt install -y g++-11
htop
btop btop更加多的信息可以查看;
通过指令看apt安装到什么目录了 1 dpkg-query -L libssl-dev | grep -E 'openssl\/.+\.h$'
iperf 可以通过这个工具来测试网路情况。
1 2 3 参数说明 -s 以server模式启动,eg:iperf -s -c host 以client模式启动,host是server端地址,eg:iperf -c 222.35.11.23
内存清理 1 echo 3 > /proc/sys/vm/drop_caches
bash工具 bash-editors
科学上网 科学上网1
科学上网2
科学上网3
科学上网4
对比工具-替换掉之前的-beyond-compare winmerge
pgadmin pgadmin
go attach debug fail 1 sudo echo "0" |sudo tee /proc/sys/kernel/yama/ptrace_scope
mac-multiple-account-github.com mac-multiple-account-github.com
mac打开文件夹 For Mac users, press Command+Shift+G to open the prompt for path input.
通过这个快捷键,直接打开输入地址栏;
阿里云服务器升级硬盘 升级阿里云的硬盘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 fdisk -lu df -Thapt-get update apt-get install -y cloud-guest-utils growpart /dev/vda 1 resize2fs /dev/vda1 Disk /dev/nvme0n1: 300 GiB, 322122547200 bytes, 629145600 sectors sudo growpart /dev/nvme0n1 1 sudo resize2fs /dev/nvme0n1p1
aws扩容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS loop0 0 100% /snap/core20/2105 loop1 0 100% /snap/amazon-ssm-agent/7628 loop2 0 100% /snap/core18/2812 loop3 0 100% /snap/lxd/26881 loop4 0 100% /snap/snapd/20671 nvme0n1 ├─nvme0n1p1 ext4 1.0 cloudimg-rootfs 1127d3f4-3de6-4e02-8705-713269caf74d 111.5G 42% / ├─nvme0n1p14 └─nvme0n1p15 vfat FAT32 UEFI 2D7D-66A4 98.3M 6% /boot/efi xxx CHANGED: partition=1 start=227328 old: size=419203039 end=419430367 new: size=524060639 end=524287967 xxx resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/nvme0n1p1 is mounted on /; on-line resizing required old_desc_blocks = 25, new_desc_blocks = 32 The filesystem on /dev/nvme0n1p1 is now 65507579 (4k) blocks long. xxx Filesystem Size Used Avail Use% Mounted on /dev/root 243G 83G 160G 34% /
参考资料
阿里云格式化硬盘添加硬盘 老方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 fdisk -l --bytes fdisk /dev/vdb Welcome to fdisk (util-linux 2.37.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command . Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x659849d9. Command (m for help ): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2147483647, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2147483647, default 2147483647): Created a new partition 1 of type 'Linux' and of size 1024 GiB. Command (m for help ): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. root@iZuf60cqo2x41m4bfri53eZ:/home/ecs-user mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 268435200 4k blocks and 67108864 inodes Filesystem UUID: 51600195-f027-495d-a60a-d1ebe20b94a6 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done mount /dev/vdb1 /data df -h/dev/vdb1 1007G 28K 956G 1% /data echo '/dev/vdb1 /data ext4 defaults 0 0' >> /etc/fstab
1 2 3 4 5 6 7 8 sudo mkdir /bsc 如果没有格式化,就回遇到这样的麻烦 mount /dev/vdb1 /bsc mount: /bsc: wrong fs type , bad option, bad superblock on /dev/vdb1, missing codepage or helper program, or other error. https://blog.csdn.net/weixin_52903283/article/details/129045385 没有格式化造成的 mkfs -t ext4 /dev/vdb1
新方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 root@conscious-rpc1:~ NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 200G 0 disk sudo parted /dev/vdb (parted) mklabel gpt (parted) mkpart primary ext4 0% 100% (parted) quit root@conscious-blockscout:~ GNU Parted 3.6 Using /dev/vdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) mkpart primary ext4 0% 100% (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 161GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 161GB 161GB ext4 primary (parted) quit Information: You may need to update /etc/fstab. root@conscious-blockscout:~ NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 253:0 0 40G 0 disk └─vda1 253:1 0 40G 0 part / vdb 253:16 0 150G 0 disk └─vdb1 253:17 0 150G 0 part lsblk 你应该能看到 /dev/vdb1。 root@conscious-blockscout:~ mke2fs 1.47.0 (5-Feb-2023) Creating filesystem with 39321088 4k blocks and 9830400 inodes Filesystem UUID: af5be973-4c3e-4ee7-8ccb-76eb0ba67bdb Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done sudo mkdir -p /data sudo mount /dev/vdb1 /data df -h | grep /datasudo blkid /dev/vdb1 /dev/vdb1: UUID="133ff945-fcab-4c6d-89f7-f5f30aecd944" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="d5025beb-f53d-489d-ae27-17d15762c7f5" UUID=5aaed73b-366a-40a6-b632-863bd80bab1c /data ext4 defaults 0 0
使用权限 需要将key文件设置成 600,之前是0644权限;
1 2 3 4 5 6 7 8 9 10 11 12 13 Permissions 0644 for '/Users/xxx/.ssh/xxxx.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/Users/xxx/.ssh/xxxx.pem" : bad permissions xxxr@xxx.xxx.xxx.xxx: Permission denied (publickey). ```bash docker pull postgres docker run --name postgres \ --restart=always \ -e POSTGRES_PASSWORD=123456 \ -p 5432:5432 \ -v /data/postgresql:/var/lib/postgresql/data \ -d postgres
ai语言 1 Microsoft Azure XiaochenNeural
export 的时候发现了报错 1 2 export : not valid in this context由于当时安装 zsh 出现的问题。
netstat 1 2 3 4 5 6 7 8 9 10 11 12 13 netstat Recv-Q 今天发现了某个端口没有响应了,通过netstat看,这个端口里面积攒了很多数据没有被处理。后面才知道go/gin写的一个服务把主线程阻塞了,造成了各种问题。 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 312 0 :::6010 :::* LISTEN 2447694/./wall 这里面其实就是说有312个字节从内核送到了用户态,但是用户态没有处理,后面还发现自己的很多服务器都处在僵尸状态 defunct ps -e -o stat ,ppid,pid,cmd | egrep '^[Zz]' 通过这个指令可以调出全部的僵尸进程,一般都需要关闭掉父进程 parent process id sh ./start.sh 由于我们这个程序是通过一个脚本来启动的,所以最终还是找到脚本把它kill 掉就好了。
统计日志里面重复选项 1 awk '{print $6}' ./logs/log.log | sort | uniq -c | sort -k1n
mac Mac快捷键 1 2 3 4 5 6 7 8 9 command +`ctrl+command +space = opt+↑|↓ fun+↑|↓ command +o
android投放文件给mac localsend
chmod的意思 chmod是一个Linux/Unix命令,用于更改文件或目录的权限。其中,777是一种权限设置,表示所有用户都有读、写和执行的权限。具体来说,7表示所有者的权限,7表示组的权限,7表示其他用户的权限。每个数字都可以用二进制表示,例如7可以表示为111,其中1表示有权限,0表示没有权限。因此,777可以表示为111111111,即所有用户都有读、写和执行的权限。包括读、写和执行权限。
使用 linux 生成 key 在 Linux 中,可以使用以下命令生成高强度的密钥对:
1 ssh-keygen -t rsa -b 4096
该命令将生成一个 4096 位的 RSA 密钥对,并将其保存在默认位置 (~/.ssh/id_rsa) 和 (~/.ssh/id_rsa.pub)。可以使用以下命令来生成其他类型的密钥对,例如DSA和ECDSA:
1 2 3 4 5 6 ssh-keygen -t dsa -b 2048 -C "这里可以取名字" ssh-keygen -t ecdsa -b 256 -C "这里可以取名字" # ED25519是一种基于椭圆曲线密码学的公钥算法 ssh-keygen -t ed25519 -C "这里可以取名字" 生成的pub文件放到之类: ~/.ssh/authorized_keys
在生成密钥对时,请注意以下几点:
不要使用弱密码来保护私钥。
不要将私钥泄露给其他人。
不要在不必要的情况下将密钥对导出到文件中。
定期更新私钥以防止被盗。
可以使用 -C 参数来指定注释信息,例如:
1 ssh-keygen -t ed25519 -C "my comment"
ED25519是一种基于椭圆曲线密码学的公钥算法,它被广泛应用于SSHv2协议中。相对于传统的RSA算法,ED25519具有更高的安全性和加解密速度,因此被认为是一种比较安全的密钥格式。
ED25519曲线选择方案有很多,推荐方案为Curve25519,其具有以下特点:
安全性:对于对称密钥,Curve25519的安全性相当于256位AES。
速度:由于Curve25519的数学特性,其加解密速度比RSA更快,尤其在小型设备上。
长度:相对于RSA密钥对,ED25519密钥对的长度更短,节省了密钥交换时的网络传输时间和空间。
综上所述,ED25519在SSHv2协议中是一种比较安全和高效的密钥格式。但是,选择密钥格式时需注意私钥的保护和管理,确保其安全性。
tree 可以安装一个 tree 命令按照树形输出目录里面的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $ tree -L 3 ./ ./ └── bhpc ├── wallet │ ├── chainnode │ ├── crontab │ ├── gateway │ ├── riskserver │ └── walletserver └── wallet-admin ├── build.sh ├── chain ├── common ├── conf ├── config ├── controller ├── doc ├── main.go ├── model ├── package.json ├── README.md ├── router └── vendor
如何区分 ubuntu|centos 1 2 3 4 cat /etc/lsb-releasecat /etc/centos-release
Linux 如何创建 service 在Linux中,可以使用systemd工具来创建和管理服务(service)。以下是创建服务的的基本步骤:
创建服务单元文件:在/etc/systemd/system目录下创建一个服务单元文件,例如myservice.service。
编辑服务单元文件:使用文本编辑器打开服务单元文件,并按照以下格式编辑:
1 2 3 4 5 6 7 8 9 10 11 [Unit] Description=My Service After=network.target [Service] Type=simple ExecStart=/path/to/my/service Restart=always [Install] WantedBy=multi-user.target
其中,Description字段是服务的描述信息;After字段指定服务启动的依赖项;Service字段指定服务的相关配置,如启动类型、命令路径、环境变量等;Install字段指定服务如何安装和启动。
重新加载systemd:执行systemctl daemon-reload命令,使systemd重新加载配置文件。
启动服务:执行systemctl start myservice命令,启动服务。
检查服务状态:执行systemctl status myservice命令,检查服务的状态。
添加服务到启动项:执行systemctl enable myservice命令,将服务添加到系统启动项中。 完成以上步骤后,您的服务就会在系统启动时自动启动,并且可以在需要时手动启动和停止。
常用命令
1 2 3 4 5 6 7 8 9 systemctl [status|start|stop|enable ] myservice journalctl -u myservice -f systemctl daemon-reload systemctl status <pid> systemctl stop hardwood
编译的时候发现问题 flag-provided-but-not-defined
1 https://github.com/pingcap/tidb/issues/8955
出问题还是来自于我设置了这个环境变量。这样造成了问题,如果一个库编译的时候,需要使用到某个特定的库,应该是在本工程里面设置就好了。不要在.zshrc文件里面设置,否则会出现一些问题。
LDFLAGS
如何获取当前机器的internet出口 1 2 curl ifconfig.me curl icanhazip.com
安装roguelike游戏 sudo apt-get install bsdgames-nonfree
用户管理 useradd -s /bin/bash -m jay-sir1 2 3 4 5 6 7 8 9 useradd -s /bin/bash -m <用户名称> sudo usermod -aG sudo 新用户名 ~/.ssh/authorized_keys
Linux useradd 命令
aria2 下载工具;
https://aria2.github.io/
1 2 3 4 yum install epel-release -y yum install aria2 -y aria2c -o <save-file-name> -s14 -x14 -k100M <download-url>
tar.zst 文件 参考
1 2 yum install zstd tar -I zstd -xvf archive.tar.zst
检查网络 1 traceroute www.baidu.com
如何查看 引用 如何使用 strace strace -c -p PID -tt
等监控一段时间之后,ctrl+c取消掉,就能看到报告。
vscode 链接之后报错 1 2 3 __vsc_prompt_cmd_original: command not found https://blog.csdn.net/qq_44949985/article/details/128902944
sha256 sha256sum ./filename.xxxx
tar.lz 解压缩
tar.lz
sudo apt-get install tar sudo apt-get install lzip
tar —lzip -xvf your_file.tar.lz
systemctl 常用的方式
asdf 工具 1 2 asdf plugin add elixir asdf plugin add nodejs
测试硬盘的读写速度 1 2 3 4 5 6 7 8 root@ip-10-58-194-127:/data 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.76003 s, 123 MB/s root@ip-10-58-194-127:/data 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.193984 s, 5.5 GB/s
ncdu 工具 ncdu 是一个用于在终端中以交互方式浏览磁盘使用情况的命令行工具。ncdu 的全称是 “NCurses Disk Usage”,它使用 ncurses 库提供了一个基于文本的图形用户界面,让你可以直观地查看和管理文件系统上的磁盘空间。
1 2 sudo apt-get install ncdu sudo yum install ncdu
使用 watch 命令行监视 程序是否还在跑 在Linux中,如果你想要每隔固定时间(比如3秒)执行某个指令,并且将结果实时显示在控制台上,而不使用crontab,你可以使用watch命令。watch命令可以让你周期性地执行一个程序,并全屏显示执行结果。这非常适用于周期性地查看命令输出的场景。
1 2 watch -n 秒数 要执行的指令 watch -n 3 supervisorctl status
普通用户授权了 sudo 权限但是还是需要输入密码 要给 Linux 普通用户授权管理员权限,并且在使用 sudo 命令时无需输入密码,可以通过编辑 sudoers 文件来实现。以下是具体步骤:
以管理员身份编辑 sudoers 文件: 在终端中以管理员身份(root)使用文本编辑器打开 sudoers 文件。常用的编辑器有 vim、nano 等。例如:
添加授权条目: 在打开的 sudoers 文件中,找到 %sudo 行,然后在其下面添加一行以授予管理员权限并允许无密码使用 sudo 命令。例如,如果要授权用户名为 username 的用户,添加如下行:
1 username ALL = (ALL ) NOPASSWD: ALL
这行的含义是:允许用户名为 username 的用户在任何主机上以任何用户身份(包括 root)运行任何命令,而且不需要输入密码。
保存并退出: 保存对 sudoers 文件的更改并退出编辑器。
测试配置: 退出当前用户,然后以 username 用户身份登录,并尝试使用 sudo 命令执行一些需要管理员权限的操作,确保无需输入密码即可执行。
请注意,修改 sudoers 文件是一个敏感操作,不当的修改可能会导致系统安全问题。建议在编辑 sudoers 文件之前备份,并确保只授予必要的权限。
是的,你可以使用以下命令来在使用 sudo visudo 时指定 vim 作为编辑器:
这样就会使用 vim 作为 sudoers 文件的编辑器。
redis端口转发 你可以使用 socat 命令在 Linux 命令行上实现端口转发。以下是使用 socat 命令将本地端口 42561 转发到 Redis 的 192.168.0.141:5789 的示例命令:
1 2 3 4 socat TCP-LISTEN:42561,fork TCP:xxx.xxx.xxx.xxx:3362 sudo apt update sudo apt install socat
可以直接使用supervisor来做成看护器;
通过ssh将远程端口映射成本地机器的端口 可以使用 SSH 的端口转发功能来实现将远程服务器上的端口映射到本地的端口。你可以通过以下命令来实现:
1 ssh -L 43242:localhost:42561 用户名@远程主机地址 -N -i 你的key文件
在这个命令中:
-L 43242:localhost:42561 指定了将本地的 43242 端口映射到远程主机的 42561 端口。 用户名@远程主机地址 是你在远程主机上的用户名和主机地址。 -N 参数表示不执行任何远程命令,这是因为你只是希望进行端口转发,而不需要在远程主机上执行任何命令。 运行这个命令后,你会被要求输入远程主机的密码或者使用 SSH 密钥登录。成功登录后,端口转发就会建立起来,将远程服务器上的 42561 端口映射到本地的 43242 端口。
现在你可以在本地访问 127.0.0.1:43242 来访问远程服务器上的 42561 端口。/var/log/journal/ 目录通常是由 systemd-journald 服务用来存储日志文件。如果该目录下的文件占用了过多的空间,可以采取以下几种方法进行处理:
1. 配置日志保留策略 可以通过修改 journald 配置文件来限制日志的大小和保留时间。
打开 journald 配置文件:
1 sudo nano /etc/systemd/journald.conf
配置以下参数:
SystemMaxUse=:设置日志占用的最大空间。
SystemKeepFree=:设置保留的最小空闲空间。
SystemMaxFileSize=:设置单个日志文件的最大大小。
MaxRetentionSec=:设置日志的最大保留时间。
例如:
1 2 3 4 5 [Journal] SystemMaxUse=500M SystemKeepFree=100M SystemMaxFileSize=50M MaxRetentionSec=1month
保存并退出编辑器。
重启 journald 服务:
1 sudo systemctl restart systemd-journald
2. 手动清理旧日志 可以使用 journalctl 命令来手动清理旧日志。
删除特定时间前的日志:
1 sudo journalctl --vacuum-time=2weeks
上述命令将删除两周前的日志。
删除特定大小以上的日志:
1 sudo journalctl --vacuum-size=500M
上述命令将把日志总大小限制在 500MB。
3. 完全清理所有日志 如果希望彻底清除所有日志,可以使用以下命令:1 2 sudo rm -rf /var/log/journal/* sudo systemctl restart systemd-journald
注意:这个操作会删除所有已保存的日志,请确保这些日志已经不再需要。
以上方法可以帮助你控制和管理 /var/log/journal/ 目录下日志文件的大小。如果有任何其他问题或需要进一步的帮助,请随时告诉我。
sudo lsof -i -n -P 是一个强大的命令,用于显示打开的网络文件(包括网络连接)。每个字段的意义如下:
1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
以下是对这些字段的详细解释:
COMMAND :
PID :
USER :
FD (File Descriptor):
表示文件描述符,具体含义取决于文件类型。
常见值包括:
cwd:当前工作目录。
txt:程序的文本代码。
mem:内存映射文件。
0、1、2:标准输入、标准输出、标准错误。
x:内执行文件。
TYPE :
表示文件类型。
常见值包括:
IPv4:IPv4网络连接。
IPv6:IPv6网络连接。
DEVICE :
表示设备号,格式为主设备号,次设备号。对于网络文件,这个字段通常是-。
SIZE/OFF :
对于常规文件,表示文件的大小或文件的偏移量。
对于网络文件,这个字段通常是-。
NODE :
表示文件节点号(在文件系统中的索引节点号)。对于网络文件,这个字段通常是-。
NAME :
表示打开的文件名或网络连接的详细信息。
对于网络文件,这个字段包含网络连接的详细信息,如协议:端口、IP地址等。
以下是一个示例输出:
1 2 3 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1201 root 3u IPv4 34321 0t0 TCP *:22 (LISTEN) sshd 1201 root 4u IPv6 34322 0t0 TCP *:22 (LISTEN) chrome 1356 user 120u IPv4 35568 0t0 TCP 192.168.1.100:45321->93.184.216.34:443 (ESTABLISHED)
在这个示例中:
COMMAND :
sshd:表示SSH守护进程。
chrome:表示Google Chrome浏览器进程。
PID :
1201:表示sshd进程的进程ID。
1356:表示chrome进程的进程ID。
USER :
root:表示sshd进程的用户ID。
user:表示chrome进程的用户ID。
FD :
3u 和 4u:表示sshd进程的文件描述符。
120u:表示chrome进程的文件描述符。
TYPE :
DEVICE :
34321 和 34322:表示设备号。
35568:表示设备号。
SIZE/OFF :
NODE :
NAME :
TCP *:22 (LISTEN):表示sshd进程在所有IPv4地址上监听端口22。
TCP *:22 (LISTEN):表示sshd进程在所有IPv6地址上监听端口22。
TCP 192.168.1.100:45321->93.184.216.34:443 (ESTABLISHED):表示chrome进程在IP地址192.168.1.100的本地端口45321与IP地址93.184.216.34的远程端口443之间有一个已建立的TCP连接。
通过理解这些字段的含义,你可以更好地分析网络连接和打开的文件情况。
1 2 3 4 5 6 7 $ nslookup example.com Server: 8.8.8.8 Address: 8.8.8.8 Non-authoritative answer: Name: example.com Address: 93.184.216.34
工程实践 2024-07-29 测试一个服务器程序,使用 golang 编写,使用了http的client请求方式。其中每秒钟3次post请求,都是相同的。最终发现只要带宽给够了,http1.1版本,能跑满 72M 带宽。而且底层的tcp连接只有一个就够了。
解压缩tgz
内存不足 (OOM - Out of Memory)
当系统内存不足时,Linux 内核的 OOM Killer(内存不足杀手)会终止占用大量内存的进程,以防止系统崩溃。Java 程序往往占用较多内存,因此可能成为被终止的目标。
检查方法:
• 查看系统日志文件 /var/log/syslog 或 /var/log/messages 中是否有 OOM Killer 的记录。可以使用以下命令查看日志:
1 dmesg | grep -i 'killed process'
或者
1 grep -i 'oom' /var/log/syslog
Aug 26 20:32:45 tron-node1 kernel: [1768037.780490] Out of memory: Killed process 1128462 (java) total-vm:25460616kB, anon-rss:15410248kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:37748kB oom_score_adj:0 Aug 26 20:32:45 tron-node1 systemd[1]: session-625.scope: A process of this unit has been killed by the OOM killer. Aug 28 01:26:44 tron-node1 kernel: [1872074.946657] Gang worker#0 ( invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0 Aug 28 01:26:44 tron-node1 kernel: [1872074.946687] oom_kill_process.cold+0xb/0x10 Aug 28 01:26:44 tron-node1 kernel: [1872074.946842] [ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name Aug 28 01:26:44 tron-node1 kernel: [1872074.946931] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=user.slice,mems_allowed=0,global_oom,task_memcg=/user.slice/user-0.slice/session-493.scope,task=java,pid=1200809,uid=0 Aug 28 01:26:44 tron-node1 kernel: [1872074.947210] Out of memory: Killed process 1200809 (java) total-vm:24947732kB, anon-rss:15404948kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:37172kB oom_score_adj:0 Aug 28 01:26:45 tron-node1 systemd[1]: session-493.scope: A process of this unit has been killed by the OOM killer.
root@tron-node1:/data/superNode# dmesg | grep -i ‘killed process’ [1693233.563672] Out of memory: Killed process 1085342 (java) total-vm:25351704kB, anon-rss:15406196kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:36788kB oom_score_adj:0 [1768037.780490] Out of memory: Killed process 1128462 (java) total-vm:25460616kB, anon-rss:15410248kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:37748kB oom_score_adj:0 [1872074.947210] Out of memory: Killed process 1200809 (java) total-vm:24947732kB, anon-rss:15404948kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:37172kB oom_score_adj:0 你当前的 Java 应用在运行时遭遇了 “Out of Memory” 错误,系统的 OOM Killer 终止了该进程。你的 JVM 参数配置占用了大量的内存(9GB 堆内存、额外的元空间、代码缓存和直接内存),这可能导致了系统内存不足。
调整建议: 1. 降低堆内存大小 (-Xms 和 -Xmx) 如果物理内存不足以支持当前配置,建议降低堆内存的初始和最大值。例如,尝试将 -Xms 和 -Xmx 设置为 6GB 或 7GB:
2. 调整其他内存相关参数
3. 监控系统资源 使用 htop 或 top 工具实时监控系统内存的使用情况,检查是否有其他进程占用了大量内存,可能需要优化或关闭其他不必要的进程。
4. 添加交换空间 如果物理内存仍然不足,可以考虑添加或增大交换空间(swap)。例如:1 2 3 4 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
然后将其永久添加到 /etc/fstab 中。
5. 检查和优化 GC 策略 你当前使用的是 Concurrent Mark-Sweep (CMS) 垃圾回收器。虽然 CMS 适用于低延迟应用,但它也可能在内存紧张时增加内存消耗。可以考虑:
G1 GC : G1 GC 是 Java 8 之后的推荐垃圾回收器,适用于大部分场景,并且在内存管理上更有效。
6. 日志和诊断 检查 gc.log 和 start.log 日志,看看是否有指示性的信息,例如垃圾回收频率、长时间的 GC 暂停等,这些可能会帮助你进一步优化 JVM 参数。
通过以上调整,可以减少内存消耗,避免被 OOM Killer 终止进程。
mac services 由于使用了本地的 gitee 版本的 brew services 造成了各种问题。将其切换成github里面的版本,就好很多了。
如何直接查询 ipv4地址
让 本地端口 → 远程主机端口 1 ssh -L <本地端口>:<目标主机>:<目标端口> <SSH用户>@<SSH服务器>
引用