gogs ubuntu 迁移

前面的服务器到期了,由于新买了服务器,所以需要迁移到新的环境上,由于服务器上有很多其他的东西,又不太愿意直接把整个操作系统克隆到新的服务器上,

步骤记录

  1. 在目标服务器上安装gogs,具体安装方法在前面的blog有讲过
  2. 安装完成后需要访问web然后执行数据库初始化
  3. 执行完成初始化后,gogs的文件中才会有gogs-repositories这个文件夹。可以先删除这个文件夹
  4. 在原服务器上找到gogs-repositories 这个文件夹,执行命令tar -zcvf gogs-repositories.tar.gz gogs-repositories压缩一下,然后scp到新服务器
  5. 备份原服务器的mysql数据库。
  6. 停止gogs服务
  7. 在新服务器上恢复mysql。也可以使用Navicate的Transmit功能将服务器恢复一下。
  8. 将解压后的gogs-repositories文件夹拷贝到刚才删除的目录
  9. 重新启动gogs。就能看到恢复后的数据了。

备注

恢复之后有一些修改的。

  1. 由于切换后相关的钩子,由于一般钩子使用服务器ip配置,所以新的内容需要重新配置一下。
2020/6/13 posted in  linux

homebrew mac 安装

最近由于老的homebrew网站被墙,安装的话需要重新指定到国内的清华镜像来进行安装。

注意在安装脚本之后最好更新一下操作系统,然后再在AppStore下载一个XCode。这样方便管理很多第三方插件。

下载安装脚本

https://raw.githubusercontent.com/Homebrew/install/master/install.sh

可以翻墙然后下载安装脚本install.sh

下载完之后可以将脚本中的

BREW_REPO修改为当前我们的镜像位置

BREW_REPO="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"

修改完成之后在运行 sh install.sh 安装即可

2020/4/12 posted in  linux

阿里云配置云企业网互通

  1. 两边创建云企业网,在VPC菜单的快捷连接中可以找到云企业网配置
  2. 将自己的
  3. 最后记得使用安全组加入

但是安全组的模式只支持同一个大区的。

2020/3/31 posted in  linux

阿里云 ubuntu 18 磁盘 在线扩容

ubuntu的磁盘使用有两种方式,一是系统盘,系统盘会将磁盘分区划分到/的根分区下。
放在根目录的好处是,不管怎么使用,根分区的大小在一个磁盘上,方便移动。

如果在阿里云下再购买一张磁盘的话,那么有两种方式:购买新磁盘和对系统盘扩容。
对系统盘扩容的好处就是上面说的方便使用,对整个磁盘都可以进行扩容了。
新买一块磁盘的话,阿里云只能在其下的某个目录挂在磁盘(如果默认没开启虚拟磁盘组的情况)。这样不方便的是只能将磁盘大小扩展到某个目录下,在这个目录下使用。但是好处是当前这个磁盘可以单独备份,方便挂载和卸载的管理。

我们现在使用的方式是扩展磁盘之后,对跟目录进行扩容

首先安装两个依赖包

apt install cloud-guest-utils
apt install xfsprogs

输入命令:

growpart /dev/vda 1

然后接着输入:

resize2fs /dev/vda1

运行df -h命令查看云盘分区大小。如果分区变大,表示已经成功扩容。

2020/3/31 posted in  linux

ubuntu 服务器运维纪要

1.CPU占用最多的前10个进程:

ps auxw|head -1;ps auxw|sort -rn -k3|head -10

2.内存消耗最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -10

3.虚拟内存使用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10
2020/3/29 posted in  linux

aliyun 添加磁盘

aliyun的ubuntu 16/18使用的是自己挂在物理磁盘,而不是逻辑分区。这种方法如果安装完成之后想要扩展根目录(/),只能够使用磁盘扩容,而不要使用新买一张盘。

磁盘扩容之后对根目录扩容

使用磁盘扩容之后可以使用工具对根目录进行扩容。

添加一块硬盘

新添加一块硬盘,并挂在到服务器上只能将硬盘挂在到某个目录下使用

# 首先使用 fdisk -l 查看磁盘的情况
$ fdisk -l

# 然后新建一块磁盘
$ fdisk /dev/sdb 
# 一次按 n 创建新磁盘、 p 使用主分区 磁盘大小等可以保持默认,最后使用w保存退出

# 格式化磁盘
$ mkfs.ext4 /dev/sdb1

# 挂载
# 只能挂在到某个目录
$ mount /dev/sdb1 /data

同时重装之后新增的硬盘是不会变动的,只需要重新挂载一遍就可以了。

所以扩容和挂载还是在不同的使用场景下有很大区别的,可以用好这两种方式。

2020/3/2 posted in  linux

Ubuntu 18 解决out of memory 问题

报错信息:

程序报错:

#程序报错
MemoryError: Unable to allocate 22.4 GiB for an array with shape (54773, 54773) and data type float64

#写入系统日志错误
$ egrep -i 'killed process' /var/log/syslog

Feb 29 23:55:12 iZbp1dfqh2kwqx54njldloZ kernel: [276605.773003] Killed process 9136 (python) total-vm:8352516kB, anon-rss:3838288kB, file-rss:4kB, shmem-rss:0kB

出现原因

使用cosine_similarity(count_matrix, count_matrix)来计算相似性,此时的count_matrix在54773大小,需要组成一个54773 * 54773 * float64大小的向量,需要的内存空间为22.4GB。

但是阿里云购买的服务器只有4v4G,一共的运存只有4G,会造成out of memory溢出。

溢出之后Linux的OOM killer(Out-Of-Memory killer) 会自动的将溢出的进程杀死,所以会直接kill掉该python进行,无法继续执行。

解决步骤1:添加虚拟内存

内存不足的问题,最好的办法是直接升级服务器配置,升为32G的内存的服务器,但是这样所需要的钱还是不少的,特别是按年购买的服务器,没法临时升级。想到最好的方法便是提升虚拟内存,使用硬盘来协助计算。(在需要实时性的环境上还是尽量升级内存)

开始

我这里虚拟了 30G 的容量进行内存扩容(主要是磁盘也不便宜啊),然后 swap 使用的利用率比例为 60,即:当物理内存剩下 60% 时使用 swap 进行交换。

临时配置

临时配置是指重启之后会失效,仅仅只是保持本次开机起作用。

分配文件空间, 建立一个 30G 的 swap 所需的文件空间

dd if=/dev/zero of=/var/blockd.swap bs=1M count=32768

文件 Swap 格式化

mkswap /var/blockd.swap

Swap 激活

swapon /var/blockd.swap

Swap 挂载

打开 /etc/fstab 文件编辑追加以下内容

/var/blockd.swap swap swap default 0 0 

修改 Swap 利用率

sysctl vm.swappiness=60

挂载生效

mount -a

永久配置

永久配置是指重启之后依然保持生效。

分配文件空间
建立一个 30G 的 swap 所需的文件空间

dd if=/dev/zero of=/var/blockd.swap bs=1M count=2048

文件 Swap 格式化

mkswap /var/blockd.swap

Swap 设置自激活

由于 /etc/rc.local 文件会优先于 /etc/fstab 执行,所以在文件 /etc/rc.local 里面增加下面一行命令

swapon /var/blockd.swap

Swap 挂载
打开 /etc/fstab 文件编辑追加以下内容

/var/blockd.swap swap swap default 0 0 

修改 Swap 利用率
编辑 /etc/sysctl.conf 实现永久生效

vm.swappiness=60

重启生效

更多命令

Swap 查看

swapon -s

Swap 关闭

swapoff /var/blockd.swap

查看 Swap 利用率

cat /proc/sys/vm/swappiness

参数解释

vm.swappiness

这个参数主要用来表示物理内存还剩多大比例才开始使用内存交换,本文中设置的值为 60 即当物理内存还剩 60% 时开始进行内存交换;这里有一篇英文相关解释:https://askubuntu.com/questions/969065/why-is-swap-being-used-when-vm-swappiness-is-0

最后
关于为什么阿里云的 ECS 关闭了 Swap ,网上很多观点均是因为阿里云为了保护磁盘而默认进行了关闭(其实交换空间频繁读写实际就是对硬盘的操作),反正我们实现我们想要的就可以了,至于损耗嘛就是官方需要考虑的问题了;关于性能的话根据阿里云的磁盘读写速度文档表明 高效云盘 能够达到 130m/s 的读写速度,比老式机械 70m/s 高了不少,凑合着用吧,如果不满于高效云盘的可以考虑 SSD 那这样的话价格也会不同,自己做一下价格对比吧!!!

解决步骤二:关闭OOM Killer

由于是OOM killer,所以需要关闭OOM Killer 来保证程序不被杀死

sysctl -w vm.overcommit_memory=2

固定:

修改/etc/sysctl.conf文件

添加一行

vm.overcommit_memory=2

注意一定要在扩展了虚拟内存之后再添加这个配置,否则的话,服务器会内存溢出周后hang机。

参考文章:

阿里云 ECS Ubuntu 16.04 创建 Swap 分区

记一次 Linux OOM-killer 分析过程

2020/3/1 posted in  linux

SnippetsLab & github gist & Lepton

gist主要用来管理一些基本的代码片段,比起github上面的项目每次要提交全工程更加轻量和简单。很多时候我们的很多代码片段是可以复用的,这些实际上也跟抽象相关。特别是脚本语言,比如javascript或者python之类,很多时候很少的修改就可以解决其他的问题。

gist的优势

  • 每个Gist都是一个Git库,有版本历史,可以被fork或clone
  • Gist有两种:公开的和私有的,私有的不会在你的Gist主页显示,也无法用搜索引擎搜索到,但这个链接是人人都能访问的
  • Gist可以搜索、下载、嵌入到网页。其中嵌入网页的功能还是不错的
  • 有很多时候我们只是想记录代码的一部分,没有必要把一堆的其他代码提交到网上去
  • 可以用gist保存一个有历史记录的长期更新的列表清单(知识点、知识迭代等)
  • 记录简短的想法或总结:有时候想总结一些技术或经验,或者有一些想法,由于内容比较短,还不足以发表博客,可以先记录下来

使用SnippetsLab来管理Github Gist的好处

  • SnippetsLab支持的代码高亮比一般的文本编辑器多很多
  • 同步到gist之后,可以保证代码的同步

gist的使用可以参考
Gist使用经验

observablehq
可以用这个应用为gist写独立的网页,方便展示,同时很多javascript代码可以展示最后的结构,前端开发的福音。
如果是纯前端代码,做好之后可以使用这个来发布,不需要在发布一个新的网页了

gist使用英文原版网页

gist和SnippetsLab相关的一个开源electron软件

Leptong官网

我的使用经验

  • 使用SnippetsLab来管理代码片段,更专注的代码管理
  • 主要用于管理javascript和python的代码片段
  • 将经常要更新和使用的list来用snippets来管理,毕竟snippets里面的文件更少,文档模式更方便管理,同时发送到gist会更加方便。
  • Lepton是开源的Gist客户端,可以针对需要进行修改相应的代码
2019/9/1 posted in  linux

linux cheatsheet

2019/5/18 posted in  linux

windows下C盘空间占满问题

Windows下C盘空间总是莫名其妙的占满,使用资源管理器查看C盘空间又没有很大的文件。删除的时候一般罪魁祸首在一些隐藏文件夹中。win10 会将很多数据文件写到APPData目录下,这里在windows的磁盘统计是看不到的,所以经常会出现C盘剩余空间为0,但是查看C盘文件的时候剩余几十G。当前发现的就是APPData里面的wechat缓存文件占用了40多G,导致C盘莫名其妙的没有空间了。


神奇的隐藏文件夹

有一些工具可以用来分析windows的文件系统空间,下面介绍两款:

TreeSize

Treesize,这个网站国内访问很慢,可能需要翻墙。这是找到的一个最好的文件分析查看工具,可以查看到C盘下的所有文件,分析其占用情况。

当前的问题就是使用Treesize解决的。

spacesniffer

spacesniffer是先发现的一个软件,界面和分析的结果展示的比较好看,但是并没有分析到所有的文件,就好比我说的隐藏文件没有分析出来,导致分析使用和实际使用还是有不少的差距。

后记

Win10 的C盘最好还是有100G以上,不然总会莫名其妙的空间占满。同时尽量少在windows商店里面下载软件,有时候安装的软件自己都不知道在什么地方,而且被各种权限弄得很混乱(虽然可能是为了安全着想)

2019/3/11 posted in  linux

MAC mdsync占用进程较高

mdsync主要用于spotlight索引使用,如果占用进程高,不要随便的使用关闭spotlight这么好的功能来获取性能。最好看一下一直很高的原因

建议使用一下的方法来看一下到底是因为索引哪些文件导致的进程占用这么高

sudo lsof -c '/mdsync$/'

我的电脑是因为插入了一个U盘导致的占用进程很高,U盘里面装的是Android SDK 不知道是不是因为这个里面的文件较多,或者某些文件冲突,也可能是U盘太慢,导致spotlight很慢,但是这个使用的很少,应该不至于造成这个原因。后面有时间可以在仔细研究一下。

把U盘弹出来之后问题解决。

2019/2/23 posted in  linux

关于kernel_task占用过高CPU导致Mac风扇狂转系统卡顿的最终极解决方法

遇到了同样的问题,按照下面的方法解决。奇怪的是最后也没有找到具体的原因,后面如果重装的时候可以看一下是不是因为操作系统问题。但是一直出现的是开机之后就出现了,并且在安全模式下也会出现,所以有可能确实是硬件问题。但如果是下面说的温感问题,但是从系统所看到的所有温度内容却又都是好的,所以非常奇怪。

我滴电脑是2013年版滴MacBook Air,用了四年多的时候突然某一天不知道为什么就开始风扇狂转。一开始只是偶尔转,开机久了就会停止,后来一发不可收拾从头响到尾并且系统及其卡顿。由于毕业了也就拿它看看视频,就没管他,但最近开始重拾手绘板没事画画图,终于忍不了啦!!!!

进入正题!

一开始我只发现风扇转的厉害,网上已经有了很多关于这个问题的解决方法,重置SMC、PRAM之类的我也都试过了,对我的电脑都不适用(当然你还是应该先试一下这个方法万一立马见效就不用看后面的啦,这部分内容网上有详解,我就不说啦)。

打开活动监视器我发现kernel_task这个系统进程CPU高达600%!我自查了下电脑觉得系统各方面应该都没什么问题吧,大概就是温控传感器坏掉了?如果拿去修好像是要换主板什么的,对于五年多的老机器我可不想在它身上花大价钱,就决定自己瞎干。

这部分内容网上有但我还是讲一下。打开关于本机—系统报告,记住型号标识符(我的是MacBookAir6,2)。打开finder—磁盘—系统—资源库—Extensions,找到IOPlatformPluginFamily.kext,右键它显示包内容,打开contents—pluglns,找到ACPI_SMC_PlatformPlugin.kext,右键它显示包内容,打开contents—Resources,找到和你型号相同的.plist(我的是MacBook Air6,2),删掉或者把它移走到随便哪个目录底下。这时候如果你的电脑如果不让你删除,那要多做一件事啦。那就是关机,按住command+R,同时开机进入恢复模式,打开终端,输入命令csrutil disable。然后重启再做上面的删除.plist的动作,然后重启就结束啦。

但是!我知道你要说但是!对接下来才是重点!那就是,我的电脑里根本没有跟我的型号一致的.plist!!!你也是这样对不对!!

以下是我裸翻了一篇国外大神写的文章而得来的方法,针对并没有一致的.plist的情况。首先为了后面不麻烦,还是先跟上面一样进入恢复模式,输入csrutil disable然后重启。接下来和之前一样,打开finder—磁盘—系统—资源库—Extensions,找到IOPlatformPluginFamily.kext,拖一份到其他目录下(我是在资源库底下新建了文件夹,把.kext拷贝在这里),然后把原来那个IOPlatformPluginFamily.text整个删除了。好啦!重启!电脑虽然还是呼呼响但是运行超级顺畅!跟新买来一样嘻嘻。再打开活动监视器,看到kerdel_task只占用一丢丢CPU啦!到这里呢电脑就可以跟往常一样顺畅运行啦!恭喜你!

然而,这风扇呼呼响哦,我还是听的很烦恼。于是下了一个风扇转速控制器,我下的是Macs fan control,这个网上很好找的哈。可以根据CPU温度半自动控制风扇的转速,这样呼呼响也被治好啦!恭喜你!

关于原理我随便讲一点嘻嘻毕竟我完完全全对电脑没什么了解。我也不知道为什么我们的电脑里没有那个型号一致的.plist,感觉好迷啊,完全不懂。总之呢就大概是温控传感器坏了,让系统误以为温度很高要一直散热,所以这个叫kernel_task的系统进程呢就一直占用大量CPU叫风扇狂转散热。现在大概就是移走了那个文件,所以系统不再管你的风扇了,所以风扇就自己一个劲转啊转,这样虽然系统正常了但又吵又容易损害风扇(不过风扇很便宜而且也不容易损坏,所以主要是太吵),如果你不怕吵就可以到此为止。但是再下一个风扇转速控制呢可以让它不那么吵,而且也能半自动控制散热,很OK啦。

原味可以参考

https://zhuanlan.zhihu.com/p/47283570

2019/1/31 posted in  linux

mac下配置vim

mac下开发IDE比较多,也比较好用,但是有时候还是会使用vim,有时间配置一下mac下面的vim

查看一下mac上的vim

输入vim可以直接看到vim的相应版本。

如果是7.*版本就需要做一下升级了,如果是8版本基本上也比较新了,足够使用了。

配置vim

1:将vimrc cp一份副本
cp /usr/share/vim/vimrc ~/.vimrc
2:编辑vimrc
vi ~/.vimrc
3:添加需要的设置

set nocompatible                 #去掉有关vi一致性模式,避免以前版本的bug和局限
set nu!                          #显示行号
set guifont=Luxi/ Mono/ 9        #设置字体,字体名称和字号
filetype on                      #检测文件的类型
set history=1000                 #记录历史的行数
set background=dark              #背景使用黑色
syntax on                        #语法高亮度显示
set autoindent                   #vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
set cindent                      #(cindent是特别针对 C语言语法自动缩进)
set smartindent                  #依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用
set tabstop=4                    #设置tab键为4个空格,
set shiftwidth =4                #设置当行之间交错时使用4个空格
set ai!                          #设置自动缩进
set showmatch                    #设置匹配模式,类似当输入一个左括号时会匹配相应的右括号
set guioptions-=T                #去除vim的GUI版本中得toolbar
set vb t_vb=                     #当vim进行编辑时,如果命令错误,会发出警报,该设置去掉警报
set ruler                        #在编辑过程中,在右下角显示光标位置的状态行
set nohls                        #默认情况下,寻找匹配是高亮度显示,该设置关闭高亮显示
2018/12/15 posted in  linux

有意思的linux下开发

#直接查找当前文件夹中有某字段的文件
(redashenv) root@yourwilliam-ubuntu:/home/yourwilliam/workspace/redash/redash/client/app# grep -rn dashboard-widget-wrapper
pages/dashboards/public-dashboard-page.html:11:      <div class="dashboard-widget-wrapper"
pages/dashboards/dashboard.less:38:  .dashboard-widget-wrapper:not(.widget-auto-height-enabled) {
pages/dashboards/dashboard.html:94:      <div class="dashboard-widget-wrapper"

引用说明

Linux查找含有某字符串的所有文件

  • : 表示当前目录所有文件,也可以是某个文件名

-r 是递归查找

-n 是显示行号

-R 查找所有文件包含子目录

-i 忽略大小写

下面是一些有意思的命令行参数:

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,

grep -l pattern files :只列出匹配的文件名,

grep -L pattern files :列出不匹配的文件名,

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),

grep -C number pattern files :匹配的上下文分别显示[number]行,

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

这里还有些用于搜索的特殊符号:

< 和 > 分别标注单词的开始与结尾。

例如:

grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,

grep '<man' * 匹配‘manic’和‘man’,但不是‘Batman’,

grep '<man>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。

'':指匹配的字符串在行首,

'$':指匹配的字符串在行尾,

2018/11/18 posted in  linux

ubuntu配置postgres远程连接

修改远程连接属性

  1. 修改postgresql.conf

postgresql.conf存放位置在/etc/postgresql/9.x/main下,这里的x取决于你安装PostgreSQL的版本号,编辑或添加下面一行,使PostgreSQL可以接受来自任意IP的连接请求。

listen_addresses = '*'

  1. 修改pg_hba.conf

pg_hba.conf,位置与postgresql.conf相同,虽然上面配置允许任意地址连接PostgreSQL,但是这在pg中还不够,我们还需在pg_hba.conf中配置服务端允许的认证方式。任意编辑器打开该文件,编辑或添加下面一行。

#TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

默认pg只允许本机通过密码认证登录,修改为上面内容后即可以对任意IP访问进行密码验证。对照上面的注释可以很容易搞明白每列的含义,具体的支持项可以查阅文末参考引用。

完成上两项配置后执行sudo service postgresql restart重启PostgreSQL服务后,允许外网访问的配置就算生效了。

配置默认用户密码

设置PostgreSQL的用户名和密码
因为PostgreSQL在安装初始化后就会存在一个账户 postgres ,可以称之为叫做超管的账户,我们现在需要做的是修改这个账号的密码。

sudo su # 切换到 root 账号
su - postgres # 切换到 postgres 账号
psql # 进入 postgresql 工作台
alter user postgres with password '你的密码'; # 执行此命令修改成你的密码
\q # 退出工作台

navicat 配置

navicat 配置postgresql数据库连接

2018/11/14 posted in  linux