Category: Program


./countkeyredis.py -p 6379 localhost
Traceback (most recent call last):
File “./countkeyredis.py”, line 30, in ?
redis_info = r.info()
File “/usr/lib/python2.4/site-packages/redis/client.py”, line 380, in info
return self.execute_command(‘INFO’)
File “/usr/lib/python2.4/site-packages/redis/client.py”, line 253, in execute_command
‘*%s\r\n%s’ % (len(cmds), ”.join(cmds)),
File “/usr/lib/python2.4/site-packages/redis/client.py”, line 239, in _execute_command
return self.parse_response(command_name, **options)
File “/usr/lib/python2.4/site-packages/redis/client.py”, line 261, in parse_response
return self.RESPONSE_CALLBACKS[command_name](response, **options)
File “/usr/lib/python2.4/site-packages/redis/client.py”, line 81, in parse_info
info[key] = get_value(value)
File “/usr/lib/python2.4/site-packages/redis/client.py”, line 66, in get_value
k, v = item.rsplit(‘=’, 1)

Source: client.py

Org:

 sub_dict = {}
        for item in value.split(‘,’):
            k, v = item.rsplit(‘=’, 1)
            try:
                sub_dict[k] = int(v)
            except ValueError:
                sub_dict[k] = v
        return sub_dict
Fix:

if ‘=’ in value:
sub_dict = {}
for item in value.split(‘,’):
k, v = item.rsplit(‘=’, 1)
try:

sub_dict[k] = int(v)
except ValueError:
sub_dict[k] = v
return sub_dict
else:
return value.split(‘,’)

Java profiler

Nếu bạn đang co vấn đề về memory,cpu,thread… của ứng dụng java mà bạn đang deploy trên remote server làm thế nào để debug khi application có vấn đề.Trong bộ jdk có các công cụ sau:

1.jstatd: chủ yếu để xem thông tin static của các process nhưng lại thiếu thông tin cpu.Nhưng không cần phải start lại chương trình java để debug

Để enable ta chạy command sau:

jstatd -J-Djava.rmi.server.logCalls=true -J-Djava.rmi.server.hostname=”ip server” -J-Djava.security.policy=tools.policy -p 44444 Sau khi start ok.

Ta sử dụng tools visualvm để connect vào port 44444 để xem các process java đang chạy trên server

2.Jmx remote: thì tương tự như jstatd nhưng xem được thông tin cpu và thêm mục thread có thể xem các thread đang chạy của application đang debug và có mục sampler.Nhưng để debug phải start application lại như sau:

java -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname="x.x.x.x" -Dcom.sun.management.jmxremote.port=33333 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -cp  javaappdebug
Sau khi start jmx,ta  lại sử dụng tools visualvm để connect vào port 33333 để xem application java mà ta đã enable jmx

Parser chuyển qua java để xem performance thế nào.Đang test thì bị vấn đề parser xử lý data khá chậm và queue lại tăng chứ không giảm.Trong khi chạy với python và insert vào mongodb rate lúc nào cũng tầm 2000/s.Giờ chạy với mysql không để ý.Mặc định set =1 innodb_flush_log_at_trx_commit=1

# If set to 1, InnoDB will flush (fsync) the transaction logs to the
# disk at each commit, which offers full ACID behavior. If you are
# willing to compromise this safety, and you are running small
# transactions, you may set this to 0 or 2 to reduce disk I/O to the
# logs. Value 0 means that the log is only written to the log file and
# the log file flushed to disk approximately once per second. Value 2
# means the log is written to the log file at each commit, but the log
# file is only flushed to disk approximately once per second.
Monitor và debug một hồi phát hiện ra, đã set lại = 0. Giờ performance của parser chạy khác nhẹ chỉ 20%
so với chạy bằng python cpu khá cao 70%.
Insert vào DB
Main thread process no. 28811, id 139719672272656, state: sleeping
Number of rows inserted 2844769, updated 0, deleted 0, read 17797107
1837.16 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s


							

Client/Server Model

In most Sockets applications, there exists a server
(responds to requests and provides responses) and a client (makes requests to
the server). The Sockets API  provides commands that
are specific to clients and to servers