Monthly Archives: April 2015

改变HyperV虚拟的Ubuntu屏幕分辨率

Ubuntu14开始已经自带Hyper-V Integration Service,也就是说在Hyper-V里跑Ubuntu 14以上的版本的时候,再也不需要像以前的版本那样单独的安装Hyper-V Integration Service,因为所有的Hyper-V网卡驱动,显卡驱动和其他组件都已经内置了。

但是和操作系统的分辨率调整这一项,还是不如在Hyper-V里跑Windows的VM来的方便,默认的Ubuntu VM只有一种分辨率(1152×864),不能像Windows VM那样根据当前的窗口自动调节分辨率,自适应屏幕。

image

目前的解决方法只能是手工指定分辨率,下面是具体步骤。

Continue reading

C#实现接口类的时候返回一个完成的Task对象

有时候实现一些接口类的全部方法,某些方法里必须返回一个task,创建一个新任务又怕开销太大,搜了一下,发现下面是一个比较常见的做法

return Task.FromResult(null);

如果用DotNet 4.6的话,就更简单了,直接返回Task.CompletedTask就可以了。

https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.completedtask.aspx

The website is under heavy load解决方法

在做网站做压力测试的时候,很容易模拟出每秒几百的http请求,如果要测试的网站是在nginx之后,这时候就会发现很多请求直接返回503 Service Unavailable错误,如下图所示。

image

这是由于在当前的并发请求过多的情况下,nginx默认会把请求放到一个队列里,一次排队让服务器处理。这个queue的上限默认是100,所以当请求超过queue上限的时候,nginx就会返回The website is under heavy load的错误信息了。

一个简单的解决方法便是修改passenger_max_request_queue_size,改成你需要的实际值,或者直接设成0,来禁用queue这个功能。

当然更好的方法是做服务器端的profiling,找出瓶颈,让每个http请求能更快的被处理完毕。

参考

远程桌面访问Azure上的Ubuntu服务器

首先要在Azure上建一个Ubuntu服务器,具体步骤本文略过。

  1. 用putty或者其他ssh工具连接到Azure上的Ubuntu服务器,目标主机的地址在Azure的管理门户里可以看到,国内Azure一般是个以chinacloudapp.cn结尾的地址,国际版Azure则是cloudapp.net。
  2. 运行sudo apt-get update,这个命令会保证所有的包都更新到最新版本。
  3. 运行sudo apt-get install ubuntu-desktop,这个命令会安装ubuntu桌面,中间某个地方提示你确认一下,点Y就可以继续。
  4. 现在Ubuntu桌面已经装上,但是在云上的服务器,没法通过本地的显示器来显示桌面,所以这时候要安装VNC server,命令是sudo apt-get install vnc4server 
  5. 运行vncserver,这时候会让你输入远程连接桌面的密码。
  6. 运行vncserver -kill :1
  7. 修改.vnc/xstartup
    !/bin/sh
    
    # Uncomment the following two lines for normal desktop:
    unset SESSION_MANAGER
    # exec /etc/X11/xinit/xinitrc
    /usr/bin/gnome-session &
    
    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    vncconfig -iconic &
    # x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    # x-window-manager &
  8. http://tightvnc.com/download.php下载TightVNC,安装的时候,选择自定义安装,然后选择只安装TightVNC Viewer就可以。
  9. 把putty的连接session保存下来,然后修改Thunnel,增加3389和5001

image

image

为Azure SQL Database创建数据库账户

用Azure SQL Database的时候,很多人都会直接用默认的管理员账号来连接数据库,这是一个不好的实践,会有潜在的安全问题。由于SQL Management Studio对Azure SQL Database支持不完美,在第一次给数据库添加新用户这步必定会浪费无数时间,本文希望能帮你节省到这部分宝贵的时间。

首先,用SQL Management Studio连接到数据库,如果报IP拒绝访问的错误,到管理门户上把当前IP加入白名单即可。连上Azure上的SQL Server后,按照下面步骤就可以添加新用户了。下面例子会创建数据库账户mydbuser,并让其成为dbo角色。

  1. 先进入master数据库,运行下面命令创建一个login
    CREATE LOGIN mydbuser WITH password = 'xxxxx'
  2. 然后切换到要添加用户的数据库,运行下面命令,创建一个user
    CREATE USER mydbuser FOR LOGIN mydbuser WITH DEFAULT_SCHEMA = dbo
  3. 用下面命令给user分配一个role
    EXEC sp_addrolemember 'db_owner', 'mydbuser'

现在这个user就有数据库的dbo权限了。