1月 142020
 

篇首语

汉字乱码分很多种情况,自从计算机进入中国就从来没有间断过,本次只讨论其中一种情况。

现象:

  1. 终端上可以显示汉字,vim中编辑汉字也没问题
  2. bash中的汉字在移动光标的时候就乱了

分析与解答:

  1. 终端上能显示汉字,说明终端的编码和程序认为的你的终端的编码是一致的;就是说,你的终端设置为utf-8编码时,通常ssh都会把该信息告诉给服务器端的程序(如:bash),通常是不会错的,但是,bash中如果手动export LANG环境变量,且和终端实际设置不一致时,该bash启动的程序(如:vim)得到的LANG信息就是手动export 的LANG,可能和实际终端设置的不一致,这时候,bash启动的那些程序就不能正确处理(输入、输出)汉字了;注意: bash中手动设置的LANG环境变量不管export与否,都不影响bash本身,要想影响到bash也容易,只需要在export之后,再在该bash中执行一个新的bash,这个新的bash就会按照export的LANG来工作了,所以,bash本身处理(输入、输出)汉字并不受当前进程中设置的LANG的影响,只受bash启动时传递给bash的LANG的影响。
  2. 曾经,build容器镜像的时候,直接设置了LANG=zh_CN.UTF-8,于是每次docker exec -it $container-name bash 的时候,bash都是工作在LANG=zh_CN.UTF-8的配置下的,所以,总是不会出现上面讨论的这种问题的。
  3. 偶尔,有一次,使用了一个没有设置LANG=zh_CN.UTF-8 的容器镜像,创建了一个没有明确设置LANG=zh_CN.UTF-8的容器,于是,每次docker exec -it $container-name bash 的时候,bash环境中就只会存在创建容器(镜像)时指定的很少的几个环境变量,docker命令上下文中的LANG 是不会影响 docker exec -it $container-name bash 的。 这种情况可以在docker exec 时指定环境变量,如:
    docker exec -e LANG=zh_CN.UTF-8 -it $container-name bash
  4. 如何查看bash中影响到当前bash进程的那个LANG 呢?
    1. 不是 set
    2. 不是echo $LANG
    3. 而是: cat /proc/$$/environ
  5. 对于bash进程来讲,正确的LANG 和不正确的LANG 在程序逻辑上差别是什么呢?
    1. 这里不直接看代码,让我们通过strace看一下
    2. 比较方法:
      1. strace 一个LANG为空的bash和一个LANG=zh_CN.UTF-8的bash,然后输入汉字
        1. 前者: 逐个字节的read,逐个字节的write;虽然是逐个字节的write,到了终端时,终端也能拼成正确的汉字,所以,表面上工作的似乎是正常的
        2. 后者: 逐个字节的read,多字节的汉字时,是多个字节凑齐后一起write的;(注意:这里存在一点儿问题,如果用户就是随便输入的,根本不可能凑齐一个合法的字符呢?会不会就卡死了呢?
      2. 但是,当我们使用方向键移动光标时:
        1. 前者认为我们好移动的是一个字节,而终端就啥了,总不能把光标放到一个汉字的中间(或三分之一处)吧
        2. 后者则能很好的告诉终端移动多少,于是就不会乱码,而且能很好的处理删除汉字的操作
  6. 虽然解决办法很简单,就是设置LANG, 但是什么时候设置LANG 却很关键。 懂了原理之后,以后再也不怕这种乱码了,以后再也不用总是靠“猜”了
 Posted by at 下午 5:15
1月 132020
 

windows上启动虚拟机的时候,我们在任务管理器中看不到一个占用很大内存的进程(就是虚拟机进程),但是linux上启动虚拟机是可以看到这样的虚拟机进程的。

为什么呢?

有没有工具可以查看到虚拟机分配走的这部分内存呢?

有:vmmap

参考:https://serverfault.com/questions/19935/virtual-machine-memory-usage-not-appearing-in-taskmanager

 

 Posted by at 下午 5:12
1月 132020
 

注册码:(需要配合下面的破解补丁使用)

 

 

一、前言

说实话,IDEA 更新是真滴快,还以为 IDEA 2019.2.4 后面会更新 IDEA 2019.2.5 版本,谁知道 11 月份刚结束,官方直接就上了 2019.3 版本 …

据官方说 IDEA 2019.3 版本在启动速度以及 UI 交互上做了很大优化。

今天无事便更新一波,尝尝鲜,使用的方法还是之前 2019.2 的破解方法,同样可以破解成功,Happy~, 又可以愉快的玩耍了。

废话少说,开始激活破解 …

二、下载最新的 IDEA 2019.3

其实也可以从老版本直接升级,这里为了照顾大部分人可能第一次安装,我们选择从官网下载,下载地址为: https://www.jetbrains.com/idea/download/

点击下载,静待下载完成~

三、启动 IDEA 2019.3 安装包

这里笔者机器上,之前是安装过 IDEA 2019.2.3 版本的,所以提示是否删除老版本,这里我们选择删除老版本:

注意: 若你第一次安装,是没有这一步的,跳过看后面即可~

继续点击下一步,这里笔者的电脑是 64 位的,顺便将 64 位的 IDEA 启动图标生成到桌面上:

点击下一步,这里又弹出卸载老版本 IDEA 2019.2.3 可以做的操作,如果是第一次安装,则没有这一步,看下面步骤即可~

这里由于我之前安装有老版本的 IDEA, 选择将老版本的缓存、本地历史也删除掉:

注意:很多小伙伴激活失败,很可能是之前老版本的遗留缓存导致的,在升级的时候,一定记住要给删除掉,否则,可能导致激活失败的情况~

继续点击下一步,启动 IDEA 2019.3, 启动成功后,我们可以看到 IDEA 新的欢迎界面如下:

四、开始激活

在激活之前,主要注意:无需改动 host 文件。

重点:激活码需要结合破解补丁,一起使用,请参考下面步骤 ⬇️⬇️⬇️

如下图所示,我们先选择免费试用 30 天,先进去再说:

五、配置破解补丁

进去过后,我们随便建个项目,点击菜单栏 Help -> Edit Custom VM Options:

注意:切记一定要通过 IDEA 来修改 .vmoptions 文件,不要手动直接去修改,现在 IDEA 针对反破解已经越来越严格了~

下载破解补丁成功以后,笔者将它放置在了 IDEA 的安装目录 /bin 路径下,以防止后面被自己误删:

注意:补丁全路径中不要包含中文,否则,可能导致破解失败!

另外,jetbrains-agent.jar 补丁是不需要解压的~

最新的破解补丁与激活码的网盘链接,已在公众号消息中回复,注意查看。

注意:在公众号回复关键字idea, 会自动回复3条信息,分别是:

  1.  激活码与最新破解补丁的网盘链接
  2. 图文破解教程
  3. 破解失败问题集锦汇总(没激活成功的小伙伴,注意看下,是不是有同样的情况导致激活失败了~)
    注意滑动屏幕查看哟~(注意:内含两个不同的破解补丁,因机器环境不同,若第一个未成功,可以换另一个试试看~)

在 .vmoptions 文件中配置我们补丁放置的全路径位置。

  1. -javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3\bin\jetbrains-agent.jar

六、重启IDEA

破解补丁配置完成以后,重启IDEA。

七、填入激活码,激活

重启完成后,开始填入激活码,点击菜单栏 Help -> Register:

注意:激活码需搭配上面的破解补丁一起使用才有效!!!

点击激活:

可以看到,已经激活到 2089 年了,开心编码吧~

 

 Posted by at 下午 2:27
12月 122019
 

yarn中的资源调度:

参考: https://blog.51cto.com/14048416/2342195

进程关系:

nodemanager要执行的脚本如下:

default_container_executor.sh  ==调起===> default_container_executor_session.sh   ===调起===> launch_container.sh ===> 调起 ===> org.apache.hadoop.mapred.YarnChild

这里的脚本都是临时生成的,从进程上来看,YarnChild  的父进程是 default_container_executor.sh 而不是 launch_container.sh,是因为从default_container_executor.sh 到 org.apache.hadoop.mapred.YarnChild  的中间的所有“调起”,都使用的是exec,并不fork新的进程,也没有新的进程ID,以至于 org.apache.hadoop.mapred.YarnChild 的父进程就是default_container_executor.sh

(MRAppMaster和YarnChild的诞生方式差不多,都是nodemanager直接生出来的),所以所,MRAppMaster是一个临时的进程

各进程关系

NameNode: 只有在name节点上存在,只有一个进程。

DataNode: 只存在于数据节点上,每个数据节点有且只有一个这样的常住进程,负责该节点上数据的存取维护操作。

NodeManger:

ResourceMange:

 Posted by at 下午 5:34
12月 112019
 

通常来讲,容器为了更小,是不会带编辑器的,但是,利用docker cp 命令copy出来,编辑后再copy进去显得又比较麻烦,于是:

上一个简单的脚本:docker-vim

用法:

注意:

  1. 脚本中没有直接vim /proc/$pid/root/$file  ,因为这个可以read到文件内容,但是write会失败; 所以,先cd到/proc/$pid/root ,再vim $file 这样是正常的
  2. 该方法 仅适用于运行这的容器,(通常这可能并不是问题),可能有更好的编辑文件的办法
    1. 将容器文件系统挂载到宿主机的某个位置
    2. 让容器动态挂载一个有编辑器程序的volume
    3. 做一个非常简易的无依赖的编辑器程序copy到容器里面
 Posted by at 下午 1:53
12月 102019
 

明明服务listen了9736端口,外面访问该端口却连接失败。在服务器上tcpdump抓包发现,只有syn,并没有syn-ack,更没有rst。

难道是防火墙? Iptables都是空的;

难道有其它高级的设置?

难道网络有问题? 我已经ssh到这个机器上了(其实是从某个机器跳过来的)

灵光一闪,可能是路由问题,找不到回包路由,自然就没法回包了; ip route一下,果然没有默认路由,只有一条同网段机器的路由,我的ssh就是从同网段的其它机器上过来的。

添加默认路由后,一切ok了

 Posted by at 下午 4:48