OneDrive 资源占用过多解决方案

最近换了新电脑,迫穷硬盘只有256GB。把各种软件一装完感觉磁盘有点不够用。还好有Office365订阅,配合着1TB的OneDrive。磁盘空间得到解放,真香!用了一段时间以后发现这个OneDrive资源占用真的高,特别是同步的时候,占用40%的CPU和700多的内存。都快赶上内存大户Chrome了。搜索了一下发现如下解决方案,记录一下。

原因:
OneDrive的安装log出错了,卡在更新/安装上,占用大量资源。只删掉Log就可以。

Log位置:
C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\userTelemetryCache.otc
C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\userTelemetryCache.otc.session

解决方法:

  • OneDrive打开并且未注销登录的情况下结束OneDrive进程
  • 删除日志文件,或者直接清空C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\ 目录
  • 重新打开OneDrive既可

参考资料:Onedrive占用CPU过多的问题以及解决方法

VS2017使用MySQL和EntityFramework闪退解决方案

现象

1.VS2017新建工程使用NuGet添加最新版本的Mysql.Data和Mysql.Data.Entity引用。此处的版本分别为8.0.13和6.10.8
1.png

2.添加ADO.NET实体数据模型,设置相关数据库信息。正常情况下设置完数据库连接信息以后点击下一步会出现设置界面闪退情况。
2.png

原因

因为本机安装的mysql-connector-net的Mysql.Data.Entity的版本与项目引用的Mysql.Data.Entity版本不一致导致。必须确认两个DLL的版本号一致。

解决方案

MySQL官网下载6.10.8版本的的 mysql-connector-net。卸载原有版本,重新安装此版本即可。
另外如果在设置数据模型中无法添加MySQL连接,需要安装 MySQL for Visual Studio

已知问题

.NETFramework版本为v.4.5.2的也会出现闪退错误,建议选择v4.7.2

MySql.Data.Entity 6.10.8 与 MySql.Data 8.0.13不兼容,在调用SaveChanges方法的时候会报错 解决方案参考
stackoverflow

1.更新MySql.Data 版本

2.更新MySql.Data.Entity 版本

如果全部更新到兼容8.0 版本,那么mysql-connector-net的版本保持最新版本即可,正常引用版本如下:
3.png

Ubuntu Server 18.04 安装Redis

源安装

sudo apt-get update
sudo apt-get install redis-serve

在 /usr/bin 目录下会出现Redis 相关文件
微信图片_20181009115104.png

redis-bemchmark: 官方Redis性能测试工具
redis-server: Redis服务器
redis-cli: Redis命令行客户端
redis-check-aof: AOF文件修复工具
redis-check-dump: RDB文件检测工具

启动

redis-server #默认方式启动,非守护进程
redis-server /etc/redis/redis.conf #使用配置文件启动,守护进程

测试

微信图片_20181009115108.png

操作

redis-cli shutdown #关闭服务
/etc/init.d/redis-server stop # 停止
/etc/init.d/redis-server start # 启动
/etc/init.d/redis-server restart # 重启

修改配置文件

1.允许其他主机登录 bind 127.0.0.1 注释掉 protected-mode 修改成yes
2.最大内存占用 maxmemory
3.缓存淘汰机制 maxmemory-policy 默认为 noeviction 可以根据实际情况设置

noeviction: 不进行置换,表示即使内存达到上限也不进行置换,
所有能引起内存增加的命令都会返回error

allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据

volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据

allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据

volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据

volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据

Windows备份文件到阿里云OSS

最近在维护之前的一个项目,涉及到一些用户上传的图片。由于是企业应用,图片直接保存在了服务器本地,并未使用相关的图片存储服务。而且服务器也没做什么靠谱的备份方案,感觉不是很放心,想把用户上传的相关文件定期保存到阿里云的OSS。搜索了一下发现有一个基于Python的脚本,大致是使用osscmd这个工具,定期打包文件上传到服务器,并删除过期文件。看了一下要在服务器上安装Python,配置一下相关key。Python不是很懂,看了一下相关的SDK,比较简单,打算用.NET 造个轮子。
首先参考阿里云OSS .NET SDK 创建 AccessKeyId和 AccessKeySecret,再次软件的主要实现以下功能。
1.设置备份目录打包文件并上传到阿里云,支持断点续传。
2.由于OSS 存储空间有限,需要删除过期备份文件。
3.配合Windows计划任务,设置自动备份任务。

待完善功能:
使用Server酱发送备份消息到微信,但是想到备份任务都是在半夜执行,半夜突然收到一条微信提醒感觉不是很友好,所以就暂时没添加相关通知功能。或许可以考虑添加一个邮件通知。

工具下载 AliyunOSSBackUp

使用说明
1.解压文件夹
2.使用编辑器打开 AliyunOSSBackUp.exe.config 文件
3.根据说明修改配置信息
4.需要 .NETFramework,Version=v4.7.2

相关源代码参考 GitHub

Ubuntu 18.04 安装Nvidia 显卡驱动

最近部门在弄一个深度学习的项目,记录一下在Ubuntu Server 18.04 上安装NVIDIA驱动的过程。
安装环境:Ubuntu Server 18.04
GPU: GeForce GTX 1080
首先在Google上搜索了一下,在Ubuntu 18.04上安装NVIDIA有三种方法
1. 使用标准Ubuntu仓库进行自动化安装
2. 使用PPA仓库进行自动化安装
3. 使用官方的NVIDIA驱动进行手动安装

在使用第一种和第二种方法安装的过程中出现一个私钥写入挂起。Nvidia 的论坛中有人提到这个问题。我尝试盲目输入2次密码,但是不成功。后面在安装过程中遇到各种问题不得不多次重装系统(精通Ubuntu Server18.04 安装)。

..+++
writing new private key to '/var/lib/shim-signed/mok/MOK.priv'
-----

最后综合各种解决方案采用了第三种安装方式进行安装。安装之前先在bios中禁用的secure boot。

查看显卡信息

lspci | grep VGA

下载驱动程序

在Nvidia 官网下载合适的驱动文件。下载完之后是一个名称为 NVIDIA-Linux-NVIDIA-Linux-x86_64-390.67.run 的文件

删除原有驱动

可选步骤,第一次安装不用执行此步骤

sudo apt-get remove --purge nvidia*

禁用nouveau驱动

修改blacklist.conf

sudo vim /etc/modprobe.d/blacklist.conf
#添加数据
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv

修改blacklist-nouveau.conf

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
#添加数据
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

更新设置重启

sudo update-initramfs -u
reboot

更新Kernel source

根据第一步执行过程中出现的提示内容替换执行第二步中的版本号

apt-get install linux-source
apt-get install linux-headers-x.x.x-x-generic

安装Nvidia 驱动

sudo chmod +x NVIDIA-Linux-x86_64-390.77.run
sudo ./NVIDIA-Linux-x86_64-390.77.run -no-x-check -no-nouveau-check -no-opengl-files

安装过程选项(步骤有很多 给出必要提示 其他选项一般都是选择OK)
The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择 No 继续。
Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 Yes 继续

挂载Nvidia驱动

modprobe nvidia

检查驱动是否安装成功

nvidia-smi

如果出现如下提示,则说明安装成功。有很多教程没给挂载驱动这一步,直接执行此命令会提示安装不成功。

nvidia

Ubuntu18.04 配置 Hadoop 3.1.0 分布式集群

环境

操作系统 Ubuntu Server 18.04
Hadoop 版本: Hadoop 3.1.0

创建Hadoop用户设置SSH 免密登录

创建Hadoop账户

sudo useradd -m hadoop -s /bin/bash

设置密码

sudo passwd hadoop

增加管理员权限

sudo adduser hadoop sudo

更新系统

sudo apt-get update

安装SSH 配置SSH 免密登录

sudo apt-get install openssh-server
ssh localhost

首次登录会提示,输入Yes 按提示输入密码 就可以登录本机。
我们需要配置成免密登录。利用 ssh-keygen 生成密钥,并将密钥加入到授权中。

exit                       
cd ~/.ssh/                
ssh-keygen -t rsa            
cat ./id_rsa.pub >> ./authorized_keys  #

配置Java环境

下载安装包 上传到用户目录

创建目录作为JDK的安装目录,这里选择安装位置为:/usr/java/
解压文件带/usr/java/目录下,cd到文件下载的位置
修改jdk1.8.0_171为jdk。 方便配置jdk

sudo mkdir /usr/java
sudo tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/java/
sudo mv /usr/java/jdk1.8.0_171  /usr/java/jdk

配置环境变量

sudo vim /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin" 
export CLASSPATH=$JAVA_HOME/lib$JAVA_HOME/jre/lib 
export JAVA_HOME=/usr/java/jdk 
export JRE_HOME=${JAVA_HOME}/jre
sudo vim  /etc/profile
JAVA_HOME=/usr/java/jdk
export JRE_HOME=/usr/java/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

更新环境变量 查看Java是否安装成功

source /etc/environment
source /etc/profile
java -version

配置Hadoop

下载安装包 上传到用户目录

sudo tar -zxvf  /home/hadoop/hadoop-3.1.0.tar.gz -C /usr/local    # 解压到/usr/local中
sudo mv  /usr/local/hadoop-3.1.0/  /usr/local/hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop /usr/local/hadoop       # 修改文件权限
cd  /usr/local/hadoop  # 进入hadoop 安装目录
./bin/hadoop version #查看hadoop 版本

集群配置

为了方便配置建议关闭防火墙以及卸载iptables

sudo  ufw enable|disable
sudo apt-get remove iptables

修改Hosts文件

sudo vim /etc/hosts

172.16.111.233    hadoopmaster.quantilogic.com.cn
172.16.111.234    hadoopslave1.quantilogic.com.cn
172.16.111.235    hadoopslave2.quantilogic.com.cn

安装pdsh和ssh 确认master节点可以SSH免密登录到slave节点

#所有节点执行
sudo apt install ssh pdsh
sudo sh -c "echo ssh > /etc/pdsh/rcmd_default"

#master 主机执行
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopmaster.quantilogic.com.cn
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopslave1.quantilogic.com.cn
ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoopslave2.quantilogic.com.cn

修改Hadoop 配置文件

配置文件路径 /usr/local/hadoop/etc/hadoop。修改完成以后上传到所有的hadoop节点

core-site.xml

<configuration>
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoopmaster.quantilogic.com.cn:9000</value>
  </property>
  <property>
   <name>hadoop.tmp.dir</name>
   <value>/usr/local/hadoop/tmp</value>
  </property>
</configuration>

hadoop-env.sh

修改Java_Home路径

export JAVA_HOME=/usr/java/jdk

hdfs-site.xml

设置Hdfs文件保存份数以及路径

<configuration>
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<property>
  <name>dfs.name.dir</name>
  <value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
  <name>dfs.data.dir</name>
  <value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

workers

设置为slave节点的主机名

hadoopslave1.quantilogic.com.cn
hadoopslave2.quantilogic.com.cn

yarn-env.sh

增加java安装路径

export JAVA_HOME=/usr/java/jdk

yarn-site.xml

<configuration>
  <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>hadoopmaster.quantilogic.com.cn</value>
  </property>
  <property>
          <name>yarn.resourcemanager.webapp.address</name>
          <value>hadoopmaster.quantilogic.com.cn:8088</value>
  </property>
  <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
      <value>false</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
  </property>
</configuration>

测试运行

在master 节点执行相关脚本进行Hadoop 测试。

初始化HDFS ,只需要执行一次。

/usr/local/hadoop/bin/hdfs namenode -format myClusterName # 初始化HDFS

启动HDFS和yarm

/usr/local/hadoop/sbin/start-dfs.sh  #启动HDFS   
/usr/local/hadoop/sbin/start-yarn.sh #  启动yarn

在三台主机上执行jps 查看运行情况。正常情况下显示如下
master节点

13905 ResourceManager
13669 SecondaryNameNode
17752 Jps
13374 NameNode

slave节点

41413 Jps
39432 NodeManager
39244 DataNode

在浏览器输入master节点 http://master:9870 和http://master:8088 查看节点运行情况。

在HDFS中创建用户目录

./bin/hdfs dfs -mkdir -p /user/hadoop

将 ./etc/hadoop 中的 xml 文件作为输入文件复制到HDFS中

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

运行MapReduce作业 将输出保存到output文件夹

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

将运行结果取回本地,也可以直接浏览器http://master:9870 中查看

rm -r ./output    # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output     # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*

frp在Windows下后台运行

在windows下使用nssm 将frp注册为服务.使其开机自启动&后台运行.

下载nssm 解压nssm到frp根目录。

以管理员身份运行cmd。 输入 cd D:\frp_0.18.0_windows_amd64  回车

运行 nssm install frpc

点击path选择frp相关目录,输入相关参数。点击Install service 即可 安装为服务.如有安全软件阻挡,允许即可。在服务管理中查找frpc服务并启动。

 
热加载 ./frps -c ./frps.ini –reload

服务端后台运行脚本 nohup ./frps -c ./frps.ini &

找到进程   ps -ef|grep frps   或者 lsof -i:7000

结束进程  kill -9 xxxx

nginx 配置

server {
listen 80;
server_name *.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
}

 

Visual Studio 2017 连接Azure设置

由于众所周知的原因导致微软的Azure平台分为Global Azure和由世纪互联运营的中国区 Azure,并且数据互不相通。目前Global Azure已经可以用国内的电话号码验证。准备一张Visa或者Master信用卡就可以愉快的使用了。今天在切换国区账号和全球账号遇到一些坑,整理记录一下。

使用 Visual Studio 2017,连接中国区 Azure

新建一个 JSON 文件 AadProvider.Configuration.json,文件内容如下

{
"AuthenticationQueryParameters": null,
"AsmEndPoint": "https://management.core.chinacloudapi.cn",
"Authority": "https://login.chinacloudapi.cn/",
"AzureResourceManagementEndpoint": "https://management.chinacloudapi.cn/",
"AzureResourceManagementAudienceEndpoints": [ "https://management.core.chinacloudapi.cn/" ],
"ClientIdentifier": "872cd9fa-d31f-45e0-9eab-6e460a02d1f1",
"EnvironmentName": "Mooncake",
"GraphEndpoint": "https://graph.chinacloudapi.cn",
"MsaHomeTenantId": "f577cd82-810c-43f9-a1f6-0cc532871050",
"NativeClientRedirect": "urn:ietf:wg:oauth:2.0:oob",
"PortalEndpoint": "http://manage.windowsazure.cn",
"ResourceEndpoint": "https://management.core.chinacloudapi.cn/",
"ValidateAuthority": true,
"VisualStudioOnlineEndpoint": "https://app.vssps.visualstudio.com/",
"VisualStudioOnlineAudience": "499b84ac-1321-427f-aa17-267ca6975798"
}
  1. 确保已登出并关闭 Visual Studio。
  2. 删除 %temp%\servicehub 文件夹(详细路径为 C:\Users%USERPROFILE%\AppData\Local\Temp\servicehub)。
  3. 把前面新建的 JSON 文件 (AadProvider.Configuration.json) 拷贝到 %localappdata%.IdentityService\AadConfigurations(详细路径为 C:\Users%USERPROFILE%\AppData\Local.IdentityService\AadConfigurations, AadConfigurations 文件夹可能不存在,需要手动创建)。
  4. 重启 VS 并添加中国 Azure 账户即可。

使用 Visual Studio 2017,连接Global Azure

  1. 确保已登出并关闭 Visual Studio。
  2. 删除文件夹。%localappdata%.IdentityService\AadConfigurations
  3. 重启 VS 即可连接 Global Azure。

切换Global Azure方法为官方解决方案,但实际操作过程中,会导致Visual Studio 登录账号失败,要求重复验证,无法切换。正确做法如下。

  1. 确保已登出并关闭 Visual Studio。
  2. 删除文件夹。%localappdata%.IdentityService\内的所有文件
  3. 打开全局代理(非必需 网络不稳定情况下使用)
  4. 重启VS即可重新连接 Global Azure