系统环境:台式机,Ubuntu 12.04 64位桌面版,网卡eth0闲置,平时使用网卡eth1.
网络环境:通过DHCP动态获取ipv4地址,自动获取ipv6地址。
每次打开Transmission通过ipv6下载PT时,进程network-manager的CPU占用率都会飙到百分之九十多。
我的解决方法就是:放弃采用NetworkManager来管理网络设置,而使用传统的/etc/network/interfaces文件来管理网络设置。实际上,服务器版的Linux系统都是采用这种方式的,NetworkManager只有桌面版的Ubuntu系统才有。
编辑/etc/NetworkManager/NetworkManager.conf
| 1 | $ sudo vim /etc/NetworkManager/NetworkManager.conf
 | 
将managed=true改为managed=false,然后重启NetworkManager服务
| 1 | $ sudo service network-manager restart
 | 
如果我们将managed设为true时,NetworkManager会接管所有网路设备的设定,而忽略/etc/network/interfaces的内容。
/etc/network/interfaces此文件原始状态只有以下行:
| 1 2 3 | # /etc/network/interfaces
auto lo
iface lo inet loopback
 | 
关于lo的这两行设定是必要的,请勿删除。删掉的话,系统将不具备 127.0.0.1 (localhost) 的网路介面。
挂起网卡eth0:
| 1 | allow-hotplug eth0 | 
动态获取ipv4地址:
| 1 2 | auto eth1 iface eth1 inet dhcp | 
自动获取ipv6地址的方式:
| 1 | iface eth1 inet6 auto | 
采用静态ipv6地址的方式:
| 1 2 3 4 | iface eth1 inet6 static
    address your_ipv6_address
    netmask 64
    up route -A inet6 add default gw your_ipv6_gateway dev $IFACE
 | 
每次修改过interfaces文件,都要运行以下命令重载设置才能生效。
| 1 | $ sudo service networking restart
 | 
此后,NetworkManager不会再占用CPU资源了。
Ubuntu默认对ipv6启用了privacy extension.
| 1 | $ sudo vim /etc/sysctl.d/10-ipv6-privacy.conf
 | 
在这个文件中,你会看到下面两行:
| 1 2 | net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.default.use_tempaddr = 2 | 
看看你的ipv6地址,你会发现一些有趣的东西。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ ip addr show
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP ql en 1000
    link/ether 00:05:06:07:08:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 198.168.1.255 scope global eth0
    inet6 2789:1234:cdef:9876:395e:c9fd:78b4:d863/64 scope global temporary dynamic
       valid_lft 604349sec preferred_lft 85349sec
    inet6 2789:1234:cdef:9876:205:06ff:fe07:0809/64 scope global dynamic
       valid_lft 2591921sec preferred_lft 604721sec
    inet6 fe80::205:06ff:fe07:0809/64 scope link
       valid_lft forever preferred_lft forever
 | 
对于网卡eth0,你会发现有两个scope global的ipv6地址:"scope global temporary dynamic" 和 "scope global dynamic".
这两个地址都是有生命期的,在"preferred_lft"这么多秒之后,它们就会被新的地址所取代。
如果,我们在文件/etc/sysctl.d/10-ipv6-privacy.conf中取值2,那么那个"temporary"地址就会被用于对外连接。如果取1,就不会;如果取0,就完全禁用privacy extension.
每次修改完此文件,需运行以下命令使设置生效:
| 1 | $ sudo service procps restart
 | 
此命令如果不起作用,可试试
| 1 | $ sudo sysctl -p
 | 
编辑以下文件
| 1 | $ sudo vim /etc/sysctl.conf
 | 
添加以下三行
| 1 2 3 | net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 | 
重启procps服务
| 1 2 | $ sudo service procps restart $ sudo sysctl -p | 
如果,还不起作用,可能就要重启系统了。
本作品由 Yysfire 创作,采用 进行许可。转载时请在显著位置标明本文永久链接:
进行许可。转载时请在显著位置标明本文永久链接:
            http://yysfire.github.io/linux/networkmanager-occupy-cpu-substantially.html